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

2024-09-29 00:11:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有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'])

但这似乎是胡说八道。提前谢谢!你知道吗


Tags: 文件csv数据pathnonedfdatanames
1条回答
网友
1楼 · 发布于 2024-09-29 00:11:48

这样怎么样:

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

相关问题 更多 >