【问题标题】:Using pandas to find daily averages使用 pandas 查找每日平均值
【发布时间】:2014-05-05 06:38:32
【问题描述】:

我目前正在编写一个接收 .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

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

我尝试通过仅处理数组中的数据来搞乱,但我确信要走 pandas 的路线,所以我的代码是相当新的。到目前为止,我有:

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)

由于我刚刚学习 pandas,因此我无法离开这里,我希望能得到一些帮助——我查看的其他问题还没有帮助。

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

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

提前致谢

【问题讨论】:

  • 你所说的“站”是什么意思?
  • 我应该更笼统,“站”代表“美国空军”列下的三个唯一值

标签: python csv pandas


【解决方案1】:

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

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。

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

【讨论】:

  • 哇,我刚刚有一个“Huzzah!”尝试后的片刻。非常感谢!
猜你喜欢
  • 2019-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-28
  • 1970-01-01
  • 2020-08-21
  • 2017-04-19
相关资源
最近更新 更多