所以我处理的csv文件,列名是可变的。
例如,列名总是有"名"、"姓"、"电话号码"等。但是,每次我下载这个csv文件(每天更新)时,列名可能会更改为"firstname";或者"名";或";firstname"甚至是"firstname"。因为我必须将列与我自己的数据库列相匹配,所以我不能使用index.
我现在能想到的解决方案是每次脚本读取csv文件时更改所有列。
csv_table = pd.read_csv(filename)
custom_col_name = ['First Name', 'Last Name', 'Phone Number']
csv_table.columns = custom_col_name
但如果有一天他们(生成csv文件)决定更改列的顺序,我的脚本和结果将会陷入困境。
有没有办法让我设置一个模式来查找,然后改变它。
像这样:
- 读csv
- 查找与'first name'相似的列
- 改变这一列"名字">
- (对所有列重复)
通过将列名转换为小写并删除空白来重命名列。
import re
df.columns= df.columns.str.lower()
df = df.rename(columns=lambda x: re.sub('s+', '', x))
# Define the desired column names (order doesn't matter)
target_names = ['First Name', 'Last Name', 'Phone Number']
# Build mapping dictionary
mapper = {}
for col_name in df.columns:
for target_name in target_names:
for_compare_1 = col_name.lower().replace(' ', '')
for_compare_2 = target_name.lower().replace(' ', '')
if for_compare_1 == for_compare_2:
mapper[col_name] = target_name
break
# Rename the columns
df = df.rename(columns=mapper)