从一堆csv文件中提取数据行,这些文件与一列中提到的特定日期相匹配

时间:2017-11-09 21:16:16

标签: python pandas csv

我有61个csv文件,与一年中的61天相关,但在每个文件中不仅有该日期的数据,还有与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'])

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

1 个答案:

答案 0 :(得分:0)

这样的事情怎么样:

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文件的名称是日期。