如何将一列添加到具有不同值的多个.csv文件

时间:2019-09-03 06:53:47

标签: python csv dataframe

我有以下情况:我有一个包含多个.csv文件的文件夹,我最终希望合并并删除重复的文件。

我当前遇到的问题是我只想删除由于合并文件而导致的重复项。换句话说:一些单个的.csv文件已经具有重复的行,我不想删除它们。

为了实现这一点,我考虑为每个.csv文件分配一个固定值的额外列。

这个想法是,我只会删除[extra column]中具有不同值的那些重复项

我已经弄清楚了如何将这样的列分配给单个的csv文件。但是我不知道如何在Python中将这样的列分配给多个(也许数百个)csv文件。我不介意[extra column]值是否确实具有1和2的值,而不是x和y的值

是否可以通过某种FOR循环对多个文件执行此操作?

谢谢您的指教!

我添加了合并多个.csv文件的代码,但没有添加我提到的额外列。

import os
import glob
import pandas as pd
os.chdir("files")

extension = 'csv'
all_filenames = [i for i in glob.glob('*.{}'.format(extension))]

# combine all files in the folder
combined_csv = pd.concat([pd.read_csv(f) for f in all_filenames])

#dataframe['NewColumn'] = 50 --- adds a new column "NewColumn" to an existing dataframe and fills the column with the value 50 for each row

# remove duplicates
combined_csv.drop_duplicates(subset=None, inplace=True)

# export to csv
combined_csv.to_csv( "combined_csv.csv", index=False, encoding='utf-8-sig')

1 个答案:

答案 0 :(得分:1)

您需要一个对于每个文件而言唯一的列。您可以使用一些整数,哈希甚至文件名。

您遇到的问题是,您需要在连接之前生成并添加此列,因此该行可能会失败:

# combine all files in the folder
combined_csv = pd.concat([pd.read_csv(f) for f in all_filenames])

相反,您可以执行以下操作:

dfs_to_concat = []
for f in all_filenames:
    df = pd.read_csv(f)
    df['file_identifier'] = [f] * len(df.index)
    dfs_to_concat.append(df)
combined_csv = pd.concat(dfs_to_concat)