【问题标题】:How to fill missing timestamps in pandas如何在熊猫中填补缺失的时间戳
【发布时间】:2020-06-18 01:02:03
【问题描述】:

我有一个 CSV 文件如下:

                  t  dd  hh  v.amm  v.alc  v.no2  v.cmo   aqi
0      201811170000  17   0   0.40   0.41   1.33   1.55  2.45
1      201811170002  17   0   0.40   0.41   1.34   1.51  2.46
2      201811170007  17   0   0.40   0.37   1.35   1.45  2.40

现在我必须通过最后一次观察结转来填补缺失的分钟。预期输出:

                  t  dd  hh  v.amm  v.alc  v.no2  v.cmo   aqi
0      201811170000  17   0   0.40   0.41   1.33   1.55  2.45
1      201811170001  17   0   0.40   0.41   1.33   1.55  2.45
2      201811170002  17   0   0.40   0.41   1.34   1.51  2.46
2      201811170003  17   0   0.40   0.41   1.34   1.51  2.46
2      201811170004  17   0   0.40   0.41   1.34   1.51  2.46
2      201811170005  17   0   0.40   0.41   1.34   1.51  2.46
2      201811170006  17   0   0.40   0.41   1.34   1.51  2.46
3      201811170007  17   0   0.40   0.37   1.35   1.45  2.40

我尝试关注这个link,但无法达到预期的输出。抱歉,我是编码新手。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    首先通过to_datetime和DataFrame.set_index创建DatetimeIndex,然后通过DataFrame.asfreq更改频率:

    df['t'] = pd.to_datetime(df['t'], format='%Y%m%d%H%M')
    df = df.set_index('t').sort_index().asfreq('Min', method='ffill')
    print (df)
                         dd  hh  v.amm  v.alc  v.no2  v.cmo   aqi
    t                                                            
    2018-11-17 00:00:00  17   0    0.4   0.41   1.33   1.55  2.45
    2018-11-17 00:01:00  17   0    0.4   0.41   1.33   1.55  2.45
    2018-11-17 00:02:00  17   0    0.4   0.41   1.34   1.51  2.46
    2018-11-17 00:03:00  17   0    0.4   0.41   1.34   1.51  2.46
    2018-11-17 00:04:00  17   0    0.4   0.41   1.34   1.51  2.46
    2018-11-17 00:05:00  17   0    0.4   0.41   1.34   1.51  2.46
    2018-11-17 00:06:00  17   0    0.4   0.41   1.34   1.51  2.46
    2018-11-17 00:07:00  17   0    0.4   0.37   1.35   1.45  2.40
    

    或将DataFrame.resample 与Resampler.ffill 一起使用:

    df['t'] = pd.to_datetime(df['t'], format='%Y%m%d%H%M')
    df = df.set_index('t').sort_index().resample('Min').ffill()
    

    【讨论】:

    • KeyError: 't' df = pd.read_csv ('data.csv', index_col="t") 我做错了吗?
    • @Joey - 只使用df = pd.read_csv ('data.csv') 然后应用解决方案,t 是列名,如果不同请检查print (df.columns.tolist()
    • 我又试了一次,得到ValueError:索引必须是单调递增或递减。抱歉,添麻烦了。该解决方案在使用 DataFrame.resample 时有效!
    • @Joey - 没问题,尝试在asfreq 或resample 之前排序,答案已编辑。还要检查日期时间是否正确转换。
    猜你喜欢
    • 1970-01-01
    • 2019-03-03
    • 2018-04-24
    • 2018-08-17
    • 2020-09-13
    • 2018-08-14
    • 2016-05-11
    • 2017-12-12
    相关资源
    最近更新 更多