【问题标题】:Python: Calculating Average and Standard deviation for every hour in csv filePython:计算csv文件中每小时的平均值和标准偏差
【发布时间】:2016-04-09 16:11:52
【问题描述】:

我有一个大的 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 非常大,我有一堆(希望创建一个循环来对每个文件做同样的事情)

谢谢!

【问题讨论】:

标签: python csv pandas


【解决方案1】:

你可以先转换to_datetime, 然后set_index 和最后 resample 聚合 meanstd

在版本 0.18.0 中在新 resample 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 ?谢谢!!!!
【解决方案2】:
df['Average Temp'] = df.Temperature.resample('H', how='mean')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-21
    • 2021-11-04
    • 2019-12-11
    • 1970-01-01
    相关资源
    最近更新 更多