使用pandas查找每日平均值

时间:2014-05-05 06:38:32

标签: python csv pandas

我目前正在编写一个代码,其中包含一个.csv文件,如下所示:

724070 93730 19800101   0   330 1.5 22000   -1.7    -5      1013.6  78
724070 93730 19800101   100 230 1.5 22000   -2.7    -5.5    1013.7  81
724070 93730 19800101   200 0   0   22000   -3.8    -4.9    1013.9  92
724070 93730 19800101   300 340 1.5 22000   -5.6    -6.1    1013.6  96
724070 93730 19800101   400 0   0   22000   -6.6    -7.7    1013.6  92
724070 93730 19800101   500 330 1.5 22000   -7.1    -8.8    1013.6  88

如果前两列是标识符,则第三列是日期,第四列是小时,最后七列是感兴趣的值。我的最终目标是为一年中的每一天提供最后七列的每日平均值。

我试图通过仅操作数组中的数据来解决问题,但我确信要走大熊猫的路线,所以我的代码相当新。到目前为止,我有:

import pandas as pd

csv = raw_input('What is the name of your file? ') 

cols = ['USAF','NCDC','DATE','HR','WND DIR','WND SPD', 'SKY CVR','TMPC','TMDC','PRES','RH']
data = pd.read_csv(csv, header = None, parse_dates = [['DATE', 'HR']],  names = cols)

因为我刚刚学习大熊猫,所以我很难离开这里,我会感激一些帮助 - 我看到的其他问题还没有帮助。

1st).csv文件中有三个唯一的“USAF”标识符,有什么方法可以将这个数据帧分成三个数据帧,这些数据帧由USAF专栏确定?

第二)大熊猫很难识别我的日期和时间格式,这不允许我进一步计算平均值。我该如何缓解这种情况?

提前致谢

1 个答案:

答案 0 :(得分:2)

通过观察创建平均值非常简单。请注意,这不是特定于日期的概念,您基本上希望使用某些值作为组标识符创建平均值。标准代码是

df = pd.DataFrame(data)
means = df.groupby('DATE').mean()

如果您想根据名为“A”的列的三个值“a1”,“a2”,“a3”分隔您的数据,一种方法是

data1 = df[df['A'] == 'a1']
data2 = df[df['A'] == 'a2']
data3 = df[df['A'] == 'a3']

你可以在任何数据帧上执行此操作 - 也就是我之前称为means的数据帧。但是,如果您要对不同的stations执行的计算相同,则分隔数据集没有意义。我宁愿做的是将数据集保持在一起,完成所有操作,并且在查看结果和/或绘图之前不要拆分。那是更清洁,imo。

至于将列标识为日期,我相信这是一个经常在这里被提及(和回答)的问题。