大 pandas 每日平均,大 pandas 。重新取样
问题描述
我有一个类似于此的CSV文件
Date,Temp1,Temp2
23-Oct-09 01:00:00,21.1,22.3
23-Oct-09 04:00:00,22.3,23.8
23-Oct-09 07:00:00,21.4,21.3
23-Oct-09 10:00:00,21.5,21.6
23-Oct-09 13:00:00,22.3,23.8
23-Oct-09 16:00:00,21.4,21.3
23-Oct-09 19:00:00,21.1,22.3
23-Oct-09 22:00:00,21.4,21.3
24-Oct-09 01:00:00,22.3,23.8
24-Oct-09 04:00:00,22.3,23.8
24-Oct-09 07:00:00,21.1,22.3
24-Oct-09 10:00:00,22.3,23.8
24-Oct-09 13:00:00,21.1,22.3
24-Oct-09 16:00:00,22.3,23.8
24-Oct-09 19:00:00,21.1,22.3
24-Oct-09 22:00:00,22.3,23.8
我已经用:
读取了数据df=pd.read_csv('data.csv', index_col=0)
并将索引转换为日期时间
df.index=pd.to_datetime(df.index)
现在我想要取每天的平均温度,我一直在尝试使用pd。重新采样如下,但一直收到错误。我已经读过 pandas 了。这里有重新取样的文档和无数的例子,但我仍然不知所措...
df_avg = df.resample('D', how = 'mean')
DataError:没有要聚合的数值类型
我希望df_avg是一个具有日期时间索引和两个2列的数据帧。我用的是 pandas 0.17.1和PYTHON 3.5.2,非常感谢大家的帮助!
解决方案
您需要先将string
列转换为float
:
#add parameter parse_dates for convert to datetime first column
df=pd.read_csv('data.csv', index_col=0, parse_dates=[0])
df['Temp1'] = df.Temp1.astype(float)
df['Temp2'] = df.Temp2.astype(float)
df_avg = df.resample('D').mean()
如果
astype
返回error
,则问题是存在一些非数值。因此,您需要将to_numeric
与errors='coerce'
一起使用-然后将所有有问题的值转换为NaN
:
df['Temp1'] = pd.to_numeric(df.Temp1, errors='coerce')
df['Temp2'] = pd.to_numeric(df.Temp2, errors='coerce')
您还可以使用boolean indexing
:
print df[pd.to_numeric(df.Temp1, errors='coerce').isnull()]
print df[pd.to_numeric(df.Temp2, errors='coerce').isnull()]
相关文章