我有以下情况:我有一个包含多个.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')
答案 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)