【问题标题】:extract rows of data from a bunch of csv files that match specific dates mentioned in one column从一堆 csv 文件中提取与一列中提到的特定日期匹配的数据行
【发布时间】:2017-11-09 21:16:16
【问题描述】:

我有 61 个与一年中的 61 天相关的 csv 文件,但在每个文件中不仅有该日期的数据,还有对应于其他 61 天的数据。数据的形式是

4d7cc82e33d042fdf13b9149bcdacee1;2015-03-01 05:21.:52;45.631616;9.2073;20;0
4d7cc82e33d042fdf13b9149bcdacee1;2015-03-01 05:22:51;45.6316;9.2073;20;0
4d7cc82e33d042fdf13b9149bcdacee1;2015-03-01 05:23:51;45.6316;9.207333;20;0
4d7cc82e33d042fdf13b9149bcdacee1;2015-03-01 05:24:51;45.6316;9.207333;20;0
6b1d2f4037aa849e4f8274b61e6cb002;2015-02-28 23:37:47;45.30044;8.85833;20;49
6b1d2f4037aa849e4f8274b61e6cb002;2015-02-28 23:37:49;45.30035;8.85797;20;53
6b1d2f4037aa849e4f8274b61e6cb002;2015-02-28 23:37:51;45.30026;8.85758;20;57
6b1d2f4037aa849e4f8274b61e6cb002;2015-02-28 23:37:53;45.30017;8.85717;20;60
6b1d2f4037aa849e4f8274b61e6cb002;2015-02-28 23:37:55;45.30006;8.85674;20;64

例如,在您看到的第二列中报告了日期和时间,一组行与 2015-03-01 相关,一组行与 2015-02-28 相关 我想读取这 61 个文件并提取与每一天相关的行并将它们写入每天的其他文件中,并获取每个文件只有一天的信息。 我是否必须将一个数据框中的所有文件连接到这项工作。到目前为止我已经尝试过:

data_path = " ... "
fp = glob.glob(os.path.join(data_path, "output_*")
for j in fp:
    df = pd.read_csv(j, sep=";",header=None,names = 
['trip','dateandtime','lat','lon','vehicle','velocity'])
    df = pd.to_csv(Path2, sep=" ",header = None, names = 
['trip',df.loc[df['dateandtime'] == '2015-03-01 
*','lat','lon','vehicle','velocity'])

但这似乎是无稽之谈。提前谢谢!

【问题讨论】:

    标签: python pandas csv datetime


    【解决方案1】:

    这样的事情怎么样:

    from datetime import datetime
    import pandas as pd
    import glob
    
    data_path = '/my/data/'
    columns = ['trip', 'dateandtime', 'lat', 'lon', 'vehicle', 'velocity']
    df_all = pd.DataFrame(columns=columns)
    
    for csv_filename in glob.glob(os.path.join(data_path, "output_*.csv")):
        df = pd.read_csv(csv_filename, sep=';', header=None, names=columns, parse_dates=['dateandtime'])
        df_all = df_all.append(df)
    
    df_all.sort_values('dateandtime', inplace=True)
    
    for key, group in df_all.groupby(pd.Grouper(key='dateandtime', freq='1D')):
        if not group.empty:
            csv_name = key.strftime('%Y-%m-%d.csv')
            group.to_csv(csv_name, sep=';', index=False)
    

    它将所有可能的 CSV 文件读入单个数据帧,按日期对它们进行排序,然后分组写入。 CSV 文件的名称是日期。

    【讨论】:

    • evans您好,非常感谢您的回复。我尝试了您编写的代码并运行了它,它没有给我任何错误但没有写入文件,程序运行了几分钟但仍然没有出现文件
    • 这 61 个文件中的每一个都有 2 到 3 百万行数据。你认为这可能与这个问题有关吗?
    • 可能太多了,无法一次全部保存在内存中。我建议你至少先对 5 个文件进行测试。
    • 啊,好的,我去看看会发生什么!
    • TypeError: 仅对 DatetimeIndex、TimedeltaIndex 或 PeriodIndex 有效,但获得了 'Float64Index' 的实例
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-04
    • 1970-01-01
    • 2021-11-28
    相关资源
    最近更新 更多