Python pandas resample方法将数据帧行加倍

时间:2018-01-26 21:13:43

标签: python-3.x pandas csv datetime dataframe

我已将csv文件读入数据框,如下所示:

                     Datetime   Value
    0     2017-01-04 00:00:00   0.00
    1     2017-01-04 00:15:00   2.00
    2     2017-01-04 00:30:00   2.00
    3     2017-01-04 00:45:00   1.00
    4     2017-01-04 01:00:00   3.00
    ...
    15542 2017-09-09 23:45:00   8.00

    [15542 rows x 2 columns]

由于测量失败,缺少某些日期时间。所以我用过 resample("15min").mean().fillna(0)

就好而言,缺少的差距已经填补,但不知何故新数据框未完成 - 确切地说 - 超出特定日期时间的行不包括在内(8月12日之后的所有数据),令我惊讶的是行数更多加倍:

                     Datetime   Value
    0     2017-01-04 00:00:00   0.00
    1     2017-01-04 00:15:00   2.00
    2     2017-01-04 00:30:00   2.00
    32543 2017-12-08 23:45:00   0.00

    [32544 rows x 2 columns]

我的目标只是阅读csv,填写缺少的日期时间间隔,并将值设置为0.00,其中日期时间已完成。在这种特殊情况下,这应该导致[15552 x 2 columns](注释:需要添加10个日期时间/值)。

以下是代码:

    import pandas as pd

    def read_csv():
        for filename in path:
        file_list.append(filename)
        print(file_list)
        dfs = [pd.read_csv(filename, sep=',', parse_dates=[1], decimal='.', 
                           names=headers)for filename in path]
        df = pd.concat(dfs)
        df_new = df.set_index('Datetime').resample('15 min').mean().fillna(0).reset_index()

        print(df_new)

关于重新索引问题的想法但无法解决它。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

您想重新索引数据,而不仅仅是重新取样。

import pandas as pd
df = df.set_index('Datetime').resample('15min').mean()
new_index = pd.date_range(start=df.index.min(), end=df.index.max(), freq="15min")
df = df.reindex(new_index, fill_value=0)

这将根据提供的date_range将新值添加到索引中。