【问题标题】:How to identify data rows for the last 10 days in CSV file with pandas?如何使用 pandas 识别 CSV 文件中过去 10 天的数据行?
【发布时间】:2020-02-10 18:08:43
【问题描述】:

我是 Python 新手,目前正在寻求以下方面的帮助:

如何使用 Pandas 识别 CVS 文件中过去 10 天的数据行?我在 CSV 文件中的第一列 (report_date) 有数据值 (yyyy-mm-dd) 我每天都有数百条记录,但我只需要根据 report_date 列中的日期从该文件中获取最近 10 天,理想情况下将输出保存到新的 CSV 文件。

到目前为止我的代码:

import pandas as pd

data = pd.read_csv("path/to/my/file/myfile.csv")    

df = pd.DataFrame(report_date) 

days=10    
cutoff_date = df["report_date"].dt.date.iloc[-1] - pd.Timedelta(days=days)

有人可以帮忙吗?提前致谢!

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    首先在read_csv 中使用index_colparse_dates 参数创建DatetimeIndex

    df = pd.read_csv("path/to/my/file/myfile.csv", 
                     index_col=['report_date'], 
                     parse_dates=['report_date'])   
    

    然后可以使用DataFrame.last:

    df1 = df.last('10d')
    

    最后由DataFrame.to_csv保存到文件:

    df1.to_csv('new.csv')
    

    您的解决方案应更改为将read_csv 中的列转换为日期时间:

    df = pd.read_csv("path/to/my/file/myfile.csv", parse_dates=['report_date'])    
    
    days=10    
    cutoff_date = df["report_date"].dt.date.iloc[-1] - pd.Timedelta(days=days)
    

    然后通过Series.dt.dateboolean indexing 中比较日期:

    df1 = df[df["report_date"].dt.date > cutoff_date]
    

    上次保存到文件并删除默认索引的DataFrame.to_csv

    df1.to_csv('new.csv', index=False)
    

    编辑:我相信你需要:

    df = pd.DataFrame({'data': range(30)}, index= pd.date_range('2020-01-25', periods=30))  
    print (df)
                data
    2020-01-25     0
    2020-01-26     1
    2020-01-27     2
    2020-01-28     3
    2020-01-29     4
    2020-01-30     5
    2020-01-31     6
    2020-02-01     7
    2020-02-02     8
    2020-02-03     9
    2020-02-04    10
    2020-02-05    11
    2020-02-06    12
    2020-02-07    13
    2020-02-08    14
    2020-02-09    15
    2020-02-10    16
    2020-02-11    17
    2020-02-12    18
    2020-02-13    19
    2020-02-14    20
    2020-02-15    21
    2020-02-16    22
    2020-02-17    23
    2020-02-18    24
    2020-02-19    25
    2020-02-20    26
    2020-02-21    27
    2020-02-22    28
    2020-02-23    29
    

    today = pd.Timestamp('today').floor('d')
    df1 = df[df.index > today].first('10d')
    print (df1)
                data
    2020-02-11    17
    2020-02-12    18
    2020-02-13    19
    2020-02-14    20
    2020-02-15    21
    2020-02-16    22
    2020-02-17    23
    2020-02-18    24
    2020-02-19    25
    2020-02-20    26
    

    【讨论】:

    • 您好 jezrael,感谢您提供有关如何实现它的详细步骤。我已经尝试了这两种方法,最终创建了一个新的 csv 文件。但是它仍然包含所有日期。它不会只保存最近的 10 个日期。你知道我做错了什么吗?我想我需要类似 -> 今天是什么日期 -> 在文件中查找从今天开始的最新日期 -> 获取从该日期到过去 10 天的行。
    • @Baobab1988 - 问题是我的解决方案从最后一个日期返回最后 10 天,而不是从今天开始的最后 10 天
    • @Baobab1988 - 此示例数据应返回哪些行? df = pd.DataFrame({'report_date': pd.date_range('2020-01-25', periods=30), 'data': range(30)}) ?
    猜你喜欢
    • 2019-03-06
    • 1970-01-01
    • 1970-01-01
    • 2018-01-01
    • 2017-03-04
    • 1970-01-01
    • 2021-05-14
    • 2013-08-31
    • 2013-07-23
    相关资源
    最近更新 更多