আপনার JSON হ'ল ভিতরে একটি একক বস্তু সহ একটি অ্যারে, সুতরাং আপনি যখন এটি পড়েন তখন আপনি ভিতরে একটি অভিধান সহ একটি তালিকা পান। নীচে দেখানো হিসাবে আপনি তালিকায় 0 আইটেমটি অ্যাক্সেস করে আপনার অভিধানটি অ্যাক্সেস করতে পারেন:
json1_data = json.loads(json1_str)[0]
আপনি এখন যেমনটি প্রত্যাশা করেছিলেন ঠিক তেমন ডেটাপয়েন্টগুলিতে সঞ্চিত ডেটা অ্যাক্সেস করতে পারবেন :
datapoints = json1_data['datapoints']
আমার কাছে আরও একটি প্রশ্ন আছে যদি কেউ কামড় দিতে পারে: আমি এই ডেটাপয়েন্টগুলিতে প্রথম উপাদানগুলির গড় (যেমন ডেটাপয়েন্টস [0] [0]) নেওয়ার চেষ্টা করছি। কেবল তাদের তালিকাভুক্ত করার জন্য, আমি ডেটাপয়েন্টগুলি করার চেষ্টা করেছি [0: 5] [0] তবে আমি যা পাই তা হ'ল উভয় উপাদানগুলির সাথে প্রথম ডেটাপয়েন্ট only কেবল প্রথম উপাদান যুক্ত প্রথম 5 ডেটাপয়েন্ট পেতে চাওয়ার বিপরীতে। এই কাজ করতে একটি উপায় আছে কি?
datapoints[0:5][0]
আপনি যা আশা করছেন তা করে না datapoints[0:5]
মাত্র প্রথম 5 টি উপাদান যুক্ত একটি নতুন তালিকা স্লাইস প্রদান [0]
করে এবং এর শেষে যুক্ত করা হলে ফলাফলের তালিকার স্লাইস থেকে কেবল প্রথম উপাদানটি গ্রহণ করা হবে । ফলাফলটি পেতে আপনার যা ব্যবহার করতে হবে তা হ'ল একটি তালিকা বোধগম্যতা :
[p[0] for p in datapoints[0:5]]
গড় গণনা করার জন্য এখানে একটি সহজ উপায়:
sum(p[0] for p in datapoints[0:5])/5. # Result is 35.8
আপনি যদি NumPy ইনস্টল করতে ইচ্ছুক হন তবে এটি আরও সহজ:
import numpy
json1_file = open('json1')
json1_str = json1_file.read()
json1_data = json.loads(json1_str)[0]
datapoints = numpy.array(json1_data['datapoints'])
avg = datapoints[0:5,0].mean()
# avg is now 35.8
,
নুমপির অ্যারেগুলির জন্য স্লাইসিং সিনট্যাক্স সহ অপারেটরটি ব্যবহার করার সাথে তালিকার টুকরোগুলির সাথে আপনি যে আচরণটি প্রত্যাশা করেছিলেন তা আসল।