重命名 pandas
数据中列的名称是一种常见的数据预处理任务。
这通常是因为原始数据中的列名称可能不够清晰或准确。例如,列名可能包含空格、大写字母、特殊字符或拼写错误。
使用 pandas
的 rename
函数可以帮助我们更改列名,从而使数据更加清晰和易于理解。
此外,重命名列名还可以确保您的代码在维护和共享时更加易于交流和重用。
比如如下测试数据:
import pandas as pd
df = pd.DataFrame(
{
"col name": ["name1", "name2", "name3"],
"#num@$": [1, 1, 2],
"坐标A": [1.2, 1.3, 2.3],
"坐标B": [2.3, 3.3, 5.7],
},
)
df
使用rename
函数消除列名中的空格和特殊符号:
df.rename({"col name": "col_name", "#num@$": "num"}, axis=1)
需要修改的列名不多时,用这种方式比较直观。
使用columns
修改列名时,需要设置所有的列名,哪怕不需要修改的列名也要列出来。
df.columns = ["col_name", "num", "坐标A", "坐标B"]
df
当需要修改的列名比较多,或者所有列名都需要修改时,用这种方式。
df.columns = df.columns.str.replace(" ", "_")
df.columns = df.columns.str.replace("[#@$]", "", regex=True)
df
这种方式还支持通过正则表达式的方式替换,适合复杂替换的场景。
使用正则替换时,设置参数:regex=True
当遇到来自不同系统的同类数据时,合并之后会发现很多同样的列名,难以区分。
比如:
df1 = pd.DataFrame(
{
"坐标X": [1.2, 1.3, 2.3],
"坐标Y": [2.3, 3.3, 5.7],
},
)
df2 = pd.DataFrame(
{
"坐标X": [2.2, 3.3, 7.3],
"坐标Y": [1.3, 4.3, 3.7],
},
)
df = pd.concat([df1, df2], axis=1)
df
这时,我们可以在合并前给不同数据来源的数据的列名上加一个前缀(add_prefix
)。
df1 = df1.add_prefix("A_")
df2 = df2.add_prefix("B_")
df = pd.concat([df1, df2], axis=1)
df
除了添加前缀,也可以用添加后缀的方式(add_suffix
)来区分不同数据源的数据。
df1 = df1.add_suffix("_A")
df2 = df2.add_suffix("_B")
df = pd.concat([df1, df2], axis=1)
df