2024-10-04 09:20:53 发布
网友
我有一个文件要处理,但是列名和顺序会随着时间的推移而改变。 我想重命名列的名称,即使它们是文件中的一个更改,我也能使用它
例如:有时是
exp 1:
postcode brand abde exp1 enter code here
exp 2
PostCode brands abdx exp2
exp 3
brands postcode abde exp1
导出的输出
PostCode brand abde exp1
注意:我不能使用索引,因为顺序会随时间而变化
我将创建一个列映射器字典,您可以随时间添加到其中:
col_map = { "postcode": "PostCode", "brands": "brand", } col_order = ["PostCode", "brand"] renamed_df = df.columns.map(lambda x: col_map.get(x, x)) # <- Renames the cols to the dict values ouput = renamed_df.reindex(columns=col_order ) # <- reorders the cols based on the config list
注意col_map.get(x, x)如果是新的,则返回到提供的列,即“品牌”
col_map.get(x, x)
相反,如果您希望它出错,以便能够轻松识别问题并更新col_map,则可以使用df.columns.map(col_map)
col_map
df.columns.map(col_map)
这个问题没有明确的答案,一切都取决于标题的可变性
让我们想象一下:顺序和复数是唯一的变化。您可以map为列名添加一个清理函数,并对列进行排序:
map
def clean_name(s): # make lowercase s = s.lower() # remove trailing 's' s = s.rstrip('s') return s df.columns = df.columns.map(clean_name) df = df.sort_index(axis=1)
输入示例:
PostCode brands 0 abde exp1
输出:
brand postcode 0 exp1 abde
您可以按如下方式标准化数据帧的列名:
>>> df.rename(columns={c: "PostCode" if "postcode" in c.lower() else "Brand" for c in df.columns})
我将创建一个列映射器字典,您可以随时间添加到其中:
注意
col_map.get(x, x)
如果是新的,则返回到提供的列,即“品牌”相反,如果您希望它出错,以便能够轻松识别问题并更新
col_map
,则可以使用df.columns.map(col_map)
这个问题没有明确的答案,一切都取决于标题的可变性
让我们想象一下:顺序和复数是唯一的变化。您可以
map
为列名添加一个清理函数,并对列进行排序:输入示例:
输出:
您可以按如下方式标准化数据帧的列名:
相关问题 更多 >
编程相关推荐