我对使用pandas dataframes读取数据相对较新,使用数据集时遇到一些问题。我已经阅读了许多其他关于类似问题的StackOverflow文章,但是我在将这些解决方案应用到我的案例中时遇到了困难,可能是因为我的JSON数据的结构。我的JSON数据排列在我的数据框df = pd.DataFrame.from_records(data)
中,通常如下所示
dateTime value
0 01/16/20 04:32:42 {'bpm': 70, 'confidence': 0}
1 01/16/20 04:32:57 {'bpm': 70, 'confidence': 0}
2 01/16/20 04:33:12 {'bpm': 70, 'confidence': 1}
我的目标是读取所有这些原始每日数据,计算“bpm”的月平均值,并绘制成matplot图。我的问题是我在使用pandas datetime或mean()操作时遇到问题,因为我认为pandas不接受datetime中的datetime格式,当我尝试使用mean()时,它会给我一个pandas.core.base.DataError: No numeric types to aggregate
错误
我如何使用内置的pandas工具,通过根据月份将每日值分组计算月平均值
for file in os.listdir(data_dir): # look at every file in the folder
if file.startswith("heart_rate") and file.endswith(".json"): # only want heart_rate-date.json files
with open(os.path.join(data_dir, file)) as f: # open each file in data_dir
data = json.load(f)
df = pd.DataFrame.from_records(data)
print(df)
#df.dateTime = pd.to_datetime(df.dateTime)
#df['Month'] = df['dateTime'].dt.month
for i, j in enumerate(data):
if data[i]['value']['confidence'] > 0:
daily_avg_bpm += data[i]['value']['bpm']
daily_date = data[i]['dateTime'].split()[0]
my_date = datetime.datetime.strptime(daily_date, "%m/%d/%y").date()
days.append(my_date)
months.append(daily_date[:2])
daily_avg_bpm /= len(data)
dates.append(daily_date)
avg_bpms.append(round(daily_avg_bpm))
f.close()
plt.xlabel('Month')
plt.ylabel('Heart Rate')
plt.title("Fitbit Heart Rate")
for i, j in enumerate(dates):
plt.plot(dates[i], avg_bpms[i])
plt.show()
我没有您的数据,因此这可能无法立即工作。但除了你应该能够使用这种方法
台阶
value
列的dict值转换为列(Reference)最简单的方法是将
values
转换为列,并将dateTime
转换为实际日期时间。这样,您就可以使用resample
来聚合所需的频率:注:
对于要显示的图形,请确保您的数据为N>;所选频率的1。因此,如果月份的频率为“M”,请确保数据集中至少有2个月
有关更多详细信息,请阅读Pandas ^{相关问题 更多 >
编程相关推荐