我的需求是合并五个csv,其中七个表格的第一列都是日期(表格中未命名),根据第一列的日期将六个csv文件合并到第一个csv文件的后面(列后面),自动去除了未匹配上的数据行。
例如:表1:
date | a |
2021-11-09 | 1 |
2021-11-10 | 1 |
2021-11-11 | 1 |
表2-4:
date | b |
2021-11-10 | 2 |
2021-11-11 | 2 |
运行程序,得到表为:
date | a | b |
2021-11-10 | 1 | 2 |
2021-11-11 | 1 | 2 |
代码为:
import pandas as pd
import os
from functools import reduce
print(os.getcwd()) #打印出当前工作路径
df = pd.read_csv("C:\\Users\\hanhan\\PycharmProjects\\pythonProject\\0.csv",encoding = 'gb2312',dtype='str')
df.rename(columns={'Unnamed: 0':'date'}, inplace=True)
df1 = pd.read_csv("C:\\Users\\hanhan\\PycharmProjects\\pythonProject\\1.csv",encoding = 'gb2312',dtype='str')
df1.rename(columns={'Unnamed: 0':'date'}, inplace=True)
df2 = pd.read_csv("C:\\Users\\hanhan\\PycharmProjects\\pythonProject\\2.csv",encoding = 'gb2312',dtype='str')
df2.rename(columns={'Unnamed: 0':'date'}, inplace=True)
df3 = pd.read_csv("C:\\Users\\hanhan\\PycharmProjects\\pythonProject\\3.csv",encoding = 'gb2312',dtype='str')
df3.rename(columns={'Unnamed: 0':'date'}, inplace=True)
df4 = pd.read_csv("C:\\Users\\hanhan\\PycharmProjects\\pythonProject\\4.csv",encoding = 'gb2312',dtype='str')
df4.rename(columns={'Unnamed: 0':'date'}, inplace=True)
df=[df,df1,df2,df3,df4]
df_merge= reduce(lambda left,right: pd.merge(left,right,on=['date','date']), df)
df_merge.to_csv('all.csv',header=True,index=False)
其中:
df.rename(columns={'Unnamed: 0':'date'}, inplace=True)
是因为Unnamed: 0,也就是第一列本身文件中未命名,所以重命名为了date。
(下一个需求就是如何不去除未匹配上的数据行?)