如何从一个文件夹中读取多个具有特定名称的csv文件并将其合并?

svmlkihl  于 2023-02-06  发布在  其他
关注(0)|答案(4)|浏览(149)

我正在尝试从具有特定名称的文件夹中读取多个文件(1.car.csv、2.car.csv等),并尝试在每次迭代之后在数据集的最右侧添加新标签,并将所有csv文件合并为一个csv文件。由于“.car.csv”是常数,我想我可以使用一个for循环和.format(index)函数来遍历csv文件。所有的csv文件都有相同的属性。
帮帮我吧!

ih99xse1

ih99xse11#

  • glob用于获取文件夹中与模式*.csv匹配的所有文件
  • pd.read_csv用于将每个文件作为 Dataframe 读取
  • index_col=None您要告诉Pandas不要使用任何列作为索引,而是为DataFrame创建一个默认索引。
  • header=0您要告诉Pandas使用CSV文件的第一行作为标题行。
  • pd.concat用于将所有 Dataframe 合并为单个 Dataframe merged_df
  • axis=0意味着连接应该沿着行进行(垂直)
  • ignore_index=True执行串接,使得丢弃各个 Dataframe 的原始索引,并且为结果 Dataframe 创建新的默认索引。
import glob
import pandas as pd

path = r'<path to folder containing csv files>'
all_files = glob.glob(path + "/*.csv")

lst = []

for filename in all_files:
    df = pd.read_csv(filename, index_col=None, header=0)
    lst.append(df)

merged_df = pd.concat(lst, axis=0, ignore_index=True)
ff29svar

ff29svar2#

这可以通过miller等CSV工具轻松完成:

mlr --csv cat --filename bla1.csv *.car.csv

这将连接文件(不重复标题),并将文件名作为第一列。

f87krz0w

f87krz0w3#

可以通过以下方式使用pandas库:

import pandas as pd
import os

# path to folder where the csv files are stored
path = '/path/to/folder'

result = pd.DataFrame()

for i in range(1, n+1):
    filename = "{}.car.csv".format(i)
    file_path = os.path.join(path, filename)
    df = pd.read_csv(file_path)
    
    df['new_label'] = i
    
    result = pd.concat([result, df], ignore_index=True)

result.to_csv('final_result.csv', index=False)

上面代码中的n应该替换为文件夹中csv文件的数量。
如果你需要任何代码的解释(如果你是python或dataframes的新手),请在下面注解。

new9mtju

new9mtju4#

使用pathlib和pandas,可以使用.assign()输入新列,最后使用.concat()将所有文件连接成一个文件。

from pathlib import Path

import pandas as pd

input_path = Path("path/to/car/files/").glob("*car.csv")
output_path = "path/to/output"

pd.concat(
    (pd.read_csv(x).assign(new_label="new data") for x in input_path), ignore_index=True
).to_csv(f"{output_path}/final.csv", index=False)

相关问题