我在获取 Pandas 数据库中的每日平均值时遇到问题。我在这里检查过Calculating daily average from irregular time series using pandas它没有帮助。 csv 文件如下所示:
Date/Time,Value
12/08/13 12:00:01,5.553
12/08/13 12:30:01,2.604
12/08/13 13:00:01,2.604
12/08/13 13:30:01,2.604
12/08/13 14:00:01,2.101
12/08/13 14:30:01,2.666
等等。我的代码如下所示:
# Import iButton temperatures
flistloc = '../data/iButtons/Readings/edit'
flist = os.listdir(flistloc)
# Create empty dictionary to store db for each file
pdib = {}
for file in flist:
file = os.path.join(flistloc,file)
# Calls function to return only name
fname,_,_,_= namer(file)
# Read each file to db
pdib[fname] = pd.read_csv(file, parse_dates=0, dayfirst=True, index_col=0)
pdibkeys = sorted(pdib.keys())
#
# Calculate daily average for each iButton
for name in pdibkeys:
pdib[name]['daily'] = pdib[name].resample('D', how = 'mean')
数据库似乎没问题,但平均不起作用。这是在 iPython 中的样子:
'2B5DE4': <class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 1601 entries, 2013-08-12 12:00:01 to 2013-09-14 20:00:01
Data columns (total 2 columns):
Value 1601 non-null values
daily 0 non-null values
dtypes: float64(2)}
有人知道这是怎么回事吗?
这个问题有点老了,但无论如何我都想做出贡献,因为我不得不一遍又一遍地处理这个问题(而且我认为这不是真正的 pythonic...)。
到目前为止,我提出的最佳解决方案是使用原始索引创建一个主要包含 NA 的新数据框,并在最后填充它。
davg = df.resample('D', how='mean')
davg_NA = davg.loc[df.index]
davg_daily = davg_NA.fillna(method='ffill')
一个人甚至可以把它压缩成一行
df.resample('D', how='mean').loc[df.index].fillna(method='ffill')
我是一名优秀的程序员,十分优秀!