删除多个 CSV 文件之间的重复项
Removing duplicates between multiple CSV files
我有多个 CSV 文件,每个 CSV 文件中有两列:
- 链接(A 列)
- 描述(B 列)
我不知道找到 link 和描述时删除所有重复项的最佳方法是什么,只留下一个,这样 link 只有一个实例和描述离开。最好能一次导入所有的CSV文件,有可能一个link出现在多个CSV文件中。 link 和描述是否重复将完全相同。谢谢!
这可以通过 Pandas 实现,如下所示:
import pandas as pd
df1 = pd.read_csv("file1.csv")
df2 = pd.read_csv("file2.csv")
df = df1.merge(df2, "outer")
print(df)
如果您有两个文件,"file1.csv" 包括:
和"file2.csv"组成:
以上代码的输出为:
Links Description
0 movie1 Pirates of the Caribbean
1 movie2 Star Trek
2 movie3 Star Wars
3 movie4 James Bond
4 movie5 Iron Man
5 movie6 Toy Story
如果您愿意,可以通过
将其导出到新的 csv 文件
df.to_csv("file3.csv", index=False)
您可能想要调查 pd.concat 和 pd.merge 之间的差异。参见 this link
您可以使用集合来跟踪您已经看到的行,而不管该行在哪个文件中。当您遍历每个文件中的每一行时,您可以忽略集合中已有的任何行.
请注意,csv 模块会将每一行 return 作为一个列表,这不是可散列的数据类型。要将行存储在集合中,您必须先将其转换为元组。
import csv
already_seen_rows = set()
with open('output_file.csv', 'w', newline='') as output_file:
writer = csv.writer(output_file)
for input_filepath in list_of_input_filepaths: # os.listdir() might help here
with open(input_filepath, 'r', newline='') as input_file:
reader = csv.reader(input_file)
for row in reader:
row_tuple = tuple(row) # Converting to a hashable type so it works with the set
if row_tuple not in already_seen_rows:
writer.writerow(row)
already_seen_rows.add(row_tuple)
这可以通过 pd.concat 然后 drop_duplicates 来完成。
import pandas as pd
df1 = pd.read_csv('path/to/file1.csv')
df2 = pd.read_csv('path/to/file2.csv')
df = pd.concat([df1, df2]).drop_duplicates().reset_index(drop=True)
请参考Whosebug答案here了解更多。
我有多个 CSV 文件,每个 CSV 文件中有两列:
- 链接(A 列)
- 描述(B 列)
我不知道找到 link 和描述时删除所有重复项的最佳方法是什么,只留下一个,这样 link 只有一个实例和描述离开。最好能一次导入所有的CSV文件,有可能一个link出现在多个CSV文件中。 link 和描述是否重复将完全相同。谢谢!
这可以通过 Pandas 实现,如下所示:
import pandas as pd
df1 = pd.read_csv("file1.csv")
df2 = pd.read_csv("file2.csv")
df = df1.merge(df2, "outer")
print(df)
如果您有两个文件,"file1.csv" 包括:
和"file2.csv"组成:
以上代码的输出为:
Links Description
0 movie1 Pirates of the Caribbean
1 movie2 Star Trek
2 movie3 Star Wars
3 movie4 James Bond
4 movie5 Iron Man
5 movie6 Toy Story
如果您愿意,可以通过
将其导出到新的 csv 文件df.to_csv("file3.csv", index=False)
您可能想要调查 pd.concat 和 pd.merge 之间的差异。参见 this link
您可以使用集合来跟踪您已经看到的行,而不管该行在哪个文件中。当您遍历每个文件中的每一行时,您可以忽略集合中已有的任何行.
请注意,csv 模块会将每一行 return 作为一个列表,这不是可散列的数据类型。要将行存储在集合中,您必须先将其转换为元组。
import csv
already_seen_rows = set()
with open('output_file.csv', 'w', newline='') as output_file:
writer = csv.writer(output_file)
for input_filepath in list_of_input_filepaths: # os.listdir() might help here
with open(input_filepath, 'r', newline='') as input_file:
reader = csv.reader(input_file)
for row in reader:
row_tuple = tuple(row) # Converting to a hashable type so it works with the set
if row_tuple not in already_seen_rows:
writer.writerow(row)
already_seen_rows.add(row_tuple)
这可以通过 pd.concat 然后 drop_duplicates 来完成。
import pandas as pd
df1 = pd.read_csv('path/to/file1.csv')
df2 = pd.read_csv('path/to/file2.csv')
df = pd.concat([df1, df2]).drop_duplicates().reset_index(drop=True)
请参考Whosebug答案here了解更多。