【问题标题】:熊猫每日平均值,pandas.resample
【发布时间】:2022-01-23 14:21:33
【问题描述】:

我有一个类似的 csv 文件

Date,Temp1,Temp2

23-Oct-09 01:00:00,21.1,22.3

23-Oct-09 04:00:00,22.3,23.8

23-Oct-09 07:00:00,21.4,21.3

23-Oct-09 10:00:00,21.5,21.6

23-Oct-09 13:00:00,22.3,23.8

23-Oct-09 16:00:00,21.4,21.3

23-Oct-09 19:00:00,21.1,22.3

23-Oct-09 22:00:00,21.4,21.3

24-Oct-09 01:00:00,22.3,23.8

24-Oct-09 04:00:00,22.3,23.8

24-Oct-09 07:00:00,21.1,22.3

24-Oct-09 10:00:00,22.3,23.8

24-Oct-09 13:00:00,21.1,22.3

24-Oct-09 16:00:00,22.3,23.8

24-Oct-09 19:00:00,21.1,22.3

24-Oct-09 22:00:00,22.3,23.8

我已通过以下方式读取数据:

df=pd.read_csv('data.csv', index_col=0)

并将索引转换为日期时间

df.index=pd.to_datetime(df.index)

现在我想取每个每日温度的平均值,我一直在尝试使用 pd.resample 如下,但一直收到错误。我在这里阅读了 pandas.resample 文档和大量示例,但仍然不知所措...

df_avg = df.resample('D', how = 'mean')

DataError:没有要聚合的数字类型

我希望 df_avg 成为具有日期时间索引和两个 2 列的数据框。我正在使用 pandas 0.17.1 和 python 3.5.2,非常感谢任何帮助!

【问题讨论】:

    标签: python pandas mean numeric resampling


    【解决方案1】:

    您需要先将string 列转换为float

    #add parameter parse_dates for convert to datetime first column
    df=pd.read_csv('data.csv', index_col=0, parse_dates=[0])
    
    df['Temp1'] = df.Temp1.astype(float)
    df['Temp2'] = df.Temp2.astype(float)
    
    df_avg = df.resample('D').mean()
    

    如果astype 返回error,问题是有一些非数值。所以你需要使用to_numericerrors='coerce' - 然后所有“有问题的”值都转换为NaN

    df['Temp1'] = pd.to_numeric(df.Temp1, errors='coerce')
    df['Temp2'] = pd.to_numeric(df.Temp2, errors='coerce')
    

    您还可以使用boolean indexing 检查所有值有问题的行:

    print df[pd.to_numeric(df.Temp1, errors='coerce').isnull()]
    print df[pd.to_numeric(df.Temp2, errors='coerce').isnull()]
    

    【讨论】:

    • 如果我的回答有帮助,别忘了accept。谢谢。
    • 请注意,此方法已弃用,重采样代码现在应为 df.resample('D').mean()
    猜你喜欢
    • 2017-01-28
    • 2020-08-09
    • 1970-01-01
    • 2015-09-11
    • 2018-06-17
    • 2019-11-24
    • 2017-11-28
    • 2019-11-24
    相关资源
    最近更新 更多