【问题标题】:Import a directory of CSV files at once and keep only oldest record per file一次导入一个 CSV 文件目录,每个文件只保留最旧的记录
【发布时间】:2020-02-22 03:26:57
【问题描述】:

我有一个包含几个 csv 文件的数据库。每个 csv 文件都包含最近 7 天,只有最早的日期是最终数据。

例如“variables_2019-08-12.csv”文件包含 08-06 到 08-12 的数据(只有 08-06 的数据是最终数据),“variables_2019-08-13.csv”文件包含 08 的数据-07 至 08-13(仅 08-07 数据为最终数据)。我只想保留 variables_2019-08-12.csv 文件中日期 08-06 的记录和 variables_2019-08-13.csv 文件中日期 08-07 的记录等。服务器在 7 天内生成每个数据 7 次,只有在 7 天后数据才被视为最终数据。导入后的数据如下所示:

import pandas as pd

source = ["data/variables_2019-08-12.csv",
"data/variables_2019-08-12.csv",
"data/variables_2019-08-12.csv", "data/variables_2019-08-12.csv",
"data/variables_2019-08-12.csv", "data/variables_2019-08-12.csv",
"data/variables_2019-08-12.csv", "data/variables_2019-08-13.csv",
"data/variables_2019-08-13.csv", "data/variables_2019-08-13.csv",
"data/variables_2019-08-13.csv", "data/variables_2019-08-13.csv",
"data/variables_2019-08-13.csv", "data/variables_2019-08-13.csv"]
date = ["2019-08-06", "2019-08-07", "2019-08-08", "2019-08-09",
"2019-08-10", "2019-08-11", "2019-08-12", "2019-08-07","2019-08-08",
"2019-08-09", "2019-08-10", "2019-08-11", "2019-08-12","2019-08-13"]
id = [18404487, 18404487, 18502437, 18502437, 18502437, 18502437,
18502437, 18502437, 18502437, 18502437, 18502437, 18502437,18502437, 18502437]
usage = [11, 146, 41, 1, 2, 8, 2, 152, 42, 1, 5, 100, 2, 15]


dict = {'source': source, 'date': date, 'id': id, 'usage': usage}

df = pd.DataFrame(dict)

我正在一次读取所有 CSV 文件,然后按源列分组并过滤并仅保留每个源中最旧的日期。我在这里做错了什么?

    # group by source
    # filter only oldest date
    # ungroup dataframe
    df['date'] =  pd.to_datetime(df['date'])
   df.groupby('source').filter(lambda x: (x['date'].min())).reset_index()

#error 
filter function returned a Timestamp, but expected a scalar bool

【问题讨论】:

    标签: python pandas numpy pandas-groupby


    【解决方案1】:

    IIUC,

    如果您已经获得了连接的 df,则可以利用 groupby 中的 .agg 函数来访问列

    df.groupby('source').agg({'date' : min})
    

    注意这与

    相同
    df.groupby('source')['date'].min().reset_index()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-04
      • 1970-01-01
      • 2021-02-28
      • 1970-01-01
      • 2023-01-07
      • 1970-01-01
      • 2016-01-27
      • 1970-01-01
      相关资源
      最近更新 更多