Python:计算CSV文件中每个小时的平均值和标准差

3

我有一个大的csv文件,数据看起来像这样:

YY-MO-DD HH-MI-SS_SSS    |     Temperature   |      Magnetic
2015-12-07 20:51:06:608  |        22.7       |        32.3
2015-12-07 20:51:07:609  |        22.5       |        47.7
  ....                            ...                  ...

现在我想使用Python和Pandas创建一个类似于以下的CSV文件:
   Hour       |     Average Temp   |    Average Mag
   20:00      |         22.6       |       40
   21:00      |         ...        |       ...

每个小时都需要做同样的事情,这是与24小时相关的。

第二件事是我想做同样的平均值,但是针对每个月的每一天:

Date       |     Average Temp   |    Average Mag
7-12-2015  |         22.6       |       40
8-12-2015  |         ...        |       ...

有没有一种好的方式在Python中做到这一点? 我尝试过使用Excel,但是CSV文件非常大而且我有很多这样的文件(希望可以创建一个循环来对每个文件执行相同的操作)

谢谢!


请点击这里查看:http://stackoverflow.com/questions/24247156/plot-mean-and-std-dev-at-specific-hourly-ticks-using-pandas - tfv
2个回答

2
您可以先将to_datetime进行转换, 然后set_index,最后使用resample进行聚合, 计算meanstd
在版本0.18.0中,有新的重采样API
#convert column to datetime
df['YY-MO-DD HH-MI-SS_SSS'] = pd.to_datetime(df['YY-MO-DD HH-MI-SS_SSS'], format='%Y-%m-%d %H:%M:%S:%f')

#set index from column
df = df.set_index('YY-MO-DD HH-MI-SS_SSS')

#resample and aggregate mean
print df.resample('H').mean()
                       Temperature  Magnetic
YY-MO-DD HH-MI-SS_SSS                       
2015-12-07 20:00:00           22.6      40.0

print df.resample('H').std()
                       Temperature   Magnetic
YY-MO-DD HH-MI-SS_SSS                        
2015-12-07 20:00:00       0.141421  10.889444

print df.resample('D').mean()
                       Temperature  Magnetic
YY-MO-DD HH-MI-SS_SSS                       
2015-12-07                    22.6      40.0
print df.resample('D').std()
                       Temperature   Magnetic
YY-MO-DD HH-MI-SS_SSS                        
2015-12-07                0.141421  10.889444

如果你想把所有内容聚合到新的列中,可以使用以下方法:
#resample and aggregate mean
df1 = df.resample('H').agg(['mean','std'])
df1.columns = [' '.join(col) for col in df1.columns]
print df1.reset_index()
  YY-MO-DD HH-MI-SS_SSS  Temperature mean  Temperature std  Magnetic mean  \
0   2015-12-07 20:00:00              22.6         0.141421           40.0   

   Magnetic std  
0     10.889444  

df2 = df.resample('D').agg(['mean','std'])
df2.columns = [' '.join(col) for col in df2.columns]
print df2.reset_index()
  YY-MO-DD HH-MI-SS_SSS  Temperature mean  Temperature std  Magnetic mean  \
0            2015-12-07              22.6         0.141421           40.0   

   Magnetic std  
0     10.889444  

如果您需要编写 to_csv(可能不包括索引):
df1.to_csv('myfile.csv', index=False)

非常感谢!!!只有一个问题,除了仅打印结果之外 - 我如何直接将它们写入新的 CSV?谢谢!!! - ValientProcess

0
df['Average Temp'] = df.Temperature.resample('H', how='mean')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接