如何在PySpark中创建列名映射字典并实现列标准化重命名?
统一多DataFrame列名并验证访问有效性
1. 定义列名映射字典
先把所有需要统一的原始列名映射到标准列名,确保覆盖三个文件的所有列:
import pandas as pd # 核心映射字典,对应需求中的列名统一规则 column_mapping = { # 学生ID统一为STUDENT_ID 'studentID': 'STUDENT_ID', 'Common_ID': 'STUDENT_ID', 'S_StudentID': 'STUDENT_ID', # 地址统一为S_ADDRESS 'ADDRESS': 'S_ADDRESS', 'Common_Address': 'S_ADDRESS', 'S_ADDRESS': 'S_ADDRESS', # 手机号统一为MOBILE_NUMBER(补充统一,避免后续遗漏) 'Phone_number': 'MOBILE_NUMBER', 'Mobile_number': 'MOBILE_NUMBER', 'HOME_MOBILE': 'MOBILE_NUMBER' }
2. 加载文件并重命名列
加载每个文件到DataFrame后,使用rename()方法完成列名转换:
# 加载三个文件(替换为实际文件路径) df1 = pd.read_csv('file1.csv') df2 = pd.read_csv('file2.csv') df3 = pd.read_csv('file3.csv') # 应用映射字典完成列名统一 df1_standard = df1.rename(columns=column_mapping) df2_standard = df2.rename(columns=column_mapping) df3_standard = df3.rename(columns=column_mapping)
3. 验证重命名后的列访问
重命名后的新DataFrame完全可以通过映射后的标准列名直接获取数据,不会出现找不到列的报错,示例:
# 访问STUDENT_ID列 first_df_student_ids = df1_standard['STUDENT_ID'] # 访问S_ADDRESS列 second_df_addresses = df2_standard['S_ADDRESS'] # 访问统一后的手机号列 third_df_mobiles = df3_standard['MOBILE_NUMBER']
避免后续报错的注意事项
- 确保映射字典覆盖所有原始列名,否则未映射的列会保留原名,可能导致后续处理时列名不统一;
- 可以通过
print(df1_standard.columns)查看重命名后的列名,确认是否全部转换为标准列; - 若需要合并三个DataFrame,重命名后列名完全统一,直接用
pd.concat([df1_standard, df2_standard, df3_standard])即可完成合并。
内容的提问来源于stack exchange,提问作者BigData Lover
相关产品推荐
相关产品推荐

