【发布时间】:2022-01-04 14:53:48
【问题描述】:
我有一个文件夹 /data/csvs,其中包含 ~7000 个 CSV 文件,每个文件有 ~600 行。每个 CSV 都有一个名称,其中包含需要保留的时间戳,例如/data/csvs/261121.csv、/data/csvs/261122.csv(261121 是今天的 26/11/21)。
我需要:
- 加载每个 CSV。
- 添加一个可以保存时间戳的列,以便我知道数据来自哪个文件。时间每行增加半秒,因此该行还显示小时/分钟/秒/微秒。
- 将这些行合并到一个表中,该表将涵盖一个月的数据。
- 理想情况下,我希望最终产品是 DataFrame。
目前这是我正在做的事情:
files = os.listdir('/data/csvs')
csv_names = []
for file_name in files:
if file_name[-4:] == '.csv':
csv_names.append(file_name)
to_process = len(csv_names)
for i, csv_name in enumerate(csv_names):
df = pd.read_csv(f'{csv_folder_path}/{file_name}')
df = timestamp(df, csv_name)
to_process = to_process-1
if i == 0:
concat_df = df
concat_df.to_feather(path=processed_path)
else:
concat_df = pd.concat([concat_df, df])
if to_process % 100 == 0:
saved_df = pd.read_feather(path=processed_path)
concat_df = pd.concat([saved_df, concat_df])
concat_df.reset_index(drop=True, inplace=True)
concat_df.to_feather(path=processed_path)
我将每个 CSV 作为 DataFrame 加载,添加时间戳列并一次连接 100 个 CSV(因为我认为这会减少内存使用量),然后一次将 100 个 CSV 保存到一个大型 DataFrame 羽化文件.这真的很慢,而且会占用大量内存。
什么是更有效的方法?
【问题讨论】:
标签: python pandas dataframe csv