我有一个如下所示的数据框 (df):
Time Temp
2017-01-01 00:30:00 11.1
2017-01-01 01:00:00 10.8
2017-01-01 01:30:00 10.8
2017-01-01 02:00:00 10.8
2017-01-01 02:30:00 11.1
..... ....
Run Code Online (Sandbox Code Playgroud)
我正在尝试获取 Temp 数据的每小时平均值,我曾经使用以下代码进行操作(时间是索引):
df2 = df.resample('H').agg(['mean','std'])
Run Code Online (Sandbox Code Playgroud)
但现在我收到以下错误:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-8-b43bf44dcae3> in <module>()
----> 1 df9 = dfroof4.resample('H').agg(['mean','std'])
D:\Anaconda3\lib\site-packages\pandas\core\resample.py in aggregate(self, arg, *args, **kwargs)
314
315 self._set_binner()
--> 316 result, how = self._aggregate(arg, *args, **kwargs)
317 if result is None:
318 result = self._groupby_and_aggregate(arg,
D:\Anaconda3\lib\site-packages\pandas\core\base.py in _aggregate(self, arg, *args, **kwargs)
632 return self._aggregate_multiple_funcs(arg,
633 _level=_level,
--> 634 _axis=_axis), None
635 else:
636 result = None
D:\Anaconda3\lib\site-packages\pandas\core\base.py in _aggregate_multiple_funcs(self, arg, _level, _axis)
689 # if we are empty
690 if not len(results):
--> 691 raise ValueError("no results")
692
693 try:
ValueError: no results
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
编辑:
的输出
print(df.dtypes)
Run Code Online (Sandbox Code Playgroud)
是:
Temp object
dtype: object
Run Code Online (Sandbox Code Playgroud)
谢谢!
您需要float首先转换为astype:
df['Temp'] = df['Temp'].astype(float)
df2 = df.resample('H')['Temp'].agg(['mean','std'])
Run Code Online (Sandbox Code Playgroud)
如果一些坏数据(如strings)to_numeric用于将它们替换为NaNs:
df['Temp'] = pd.to_numeric(df['Temp'], errors='coerce')
df2 = df.resample('H')['Temp'].agg(['mean','std'])
Run Code Online (Sandbox Code Playgroud)