前几天遇到一个工作,需要将几个分别包含几十万行的csv
文件的某3列合并成1个csv
文件,当时是手工合并的:
1、csv
另存为excel
;
2、删除不需要的列,仅保留想要的列
3、excel
另存为csv
4、最后,手工合并处理好的csv
不得不说,这样操作效率真的很低,尤其是操作几十万行的文件,当时就想利用python代码肯定可以实现,今天利用周末的时间好好研究了一下,终于实现了,操作几十万行的文件只需要一两分钟,比手工高效多了。
实现思路如下:
1、利用os模块获取文件下所有csv
文件(表结构相同)
2、用pandas打开第一个文件;
3、循环打开剩下的文件;
4、利用pd.concat
拼接不同的df
,该方法可以自动去除多余的标题行;
5、挑选需要的列,去重;
6、将结果输出文csv
文件;
完整代码如下:
import pandas as pd
import os
path = input('请输入文件夹路径: ')
files = os.listdir(path)
csv_list = []
for f in files:
if os.path.splitext(f)[1] == '.csv':
csv_list.append(path + '\\' + f)
else:
pass
df = pd.read_csv(csv_list[0], low_memory=False)
for i in range(1, len(csv_list)):
df_i = pd.read_csv(csv_list[i], low_memory=False)
pieces = [df[:], df_i[:]]
df = pd.concat(pieces).drop_duplicates()
df = df.iloc[:, [1, 6, 7]] #想保留的列的编号。0为起点
df.to_csv(path +'\\csv_merge.csv', index=None, encoding='gbk')