数据:
子excel文件,其中有多个重复列数据。
总excel文件,其中包含了子excel中的全部数据列。
需求:
将子文件中的列数据添加到总excel文件对应的列中,如果当前子文件中的列不在总文件列中,则不处理对应的列。效果如下图
环境:
编程语言:Python
涉及第三方库:pandas
代码编辑环境:jupyter notebook
代码实现:
1. 导入第三方库
import pandas as pd
2.导入并查看相关数据
data = pd.read_excel('1.xlsx') # 子文件 data2 = pd.read_excel('2.xlsx') # 总数据文件 data
data2
3.定义变量,获取2个文件的列名
data_co = list(data.columns) data2_co = list(data2.columns)
4.定义空的DataFrame对象,用于存储总文件中列和子文件中列数据合并的结果。
注意:如果直接将合并后的数据添加到data2中会数据丢失的情况。即DataFrame对象有10行,合并后的数据有15行,则后5行数据可能丢失。
new_df = pd.DataFrame(columns=data2_co)
5.数据合并代码
# 循环总文件中的列名 for i in data2_co: # 将总文件中对应的列拿出来,并将中间的空值删除 data_s = data2[i].dropna() # 循环获取文件1的列名 for j in data_co: # 判断 A A.1 A.2 if i in j: data_s = pd.concat([data_s,data[j]],ignore_index=True)# 合并数据,并重置合并后数据的行索引 # 将数据保存到new_df中 new_df[i]=data_s new_df
6.数据空值处理
由于部分列在处理的时候可能是没有的,代码会自动将里面的数据用numpy中的'NAN'进行填充,这里将空值使用空字符进行替换。也可以自行使用其他字符替换。
new_df.fillna('',inplace=True)# 第一个参数表示使用什么数据来替换 ‘NAN’,第二个表示对原数据进行修改,默认不修改原数据
7.数据保存
new_df.to_excel('2.xlsx', # 设置数据保存的工作表名 sheet_name='sheet1', index=False #在保存的时候不保存数据对象中的列索引 )
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!