小秦哥 发表于 2023-7-31 15:58:32

【pandas小技巧】--修改列的名称

重命名 pandas 数据中列的名称是一种常见的数据预处理任务。
这通常是因为原始数据中的列名称可能不够清晰或准确。例如,列名可能包含空格、大写字母、特殊字符或拼写错误。
使用 pandas 的 rename函数可以帮助我们更改列名,从而使数据更加清晰和易于理解。
此外,重命名列名还可以确保您的代码在维护和共享时更加易于交流和重用。
1. 列名中的特殊字符

比如如下测试数据:
import pandas as pd

df = pd.DataFrame(
    {
      "col name": ["name1", "name2", "name3"],
      "#num@$": ,
      "坐标A": ,
      "坐标B": ,
    },
)
dfhttps://cdn.nlark.com/yuque/0/2023/png/2235414/1683704538355-09524024-0c9c-4edd-bc6a-4b545d6d2bb3.png#averageHue=%23e8dede&clientId=ude4e34e4-ae1a-4&from=paste&height=137&id=u96e66d15&originHeight=137&originWidth=333&originalType=binary&ratio=1&rotation=0&showTitle=false&size=7256&status=done&style=stroke&taskId=u114b90ab-3185-4c92-a5e1-e178f136401&title=&width=333
1.1. rename函数

使用rename函数消除列名中的空格和特殊符号:
df.rename({"col name": "col_name", "#num@$": "num"}, axis=1)https://cdn.nlark.com/yuque/0/2023/png/2235414/1683705106459-fbc38ff0-c11e-406a-bb7a-97ef2f5ead85.png#averageHue=%23e8e2e2&clientId=ude4e34e4-ae1a-4&from=paste&height=138&id=u6f310e08&originHeight=138&originWidth=293&originalType=binary&ratio=1&rotation=0&showTitle=false&size=6919&status=done&style=stroke&taskId=ub2db8829-b8d5-4a52-9b24-0b1e8ff9028&title=&width=293
需要修改的列名不多时,用这种方式比较直观。
1.2. columns属性

使用columns修改列名时,需要设置所有的列名,哪怕不需要修改的列名也要列出来。
df.columns = ["col_name", "num", "坐标A", "坐标B"]
dfhttps://cdn.nlark.com/yuque/0/2023/png/2235414/1683705221087-70ccd889-d83f-4573-b9d2-43eb0b1958b2.png#averageHue=%23e8e2e1&clientId=ude4e34e4-ae1a-4&from=paste&height=132&id=uf0c04dd2&originHeight=132&originWidth=298&originalType=binary&ratio=1&rotation=0&showTitle=false&size=6896&status=done&style=stroke&taskId=u1fa11950-2103-4c66-b792-57e4595478e&title=&width=298
当需要修改的列名比较多,或者所有列名都需要修改时,用这种方式。
1.3. replace方法

df.columns = df.columns.str.replace(" ", "_")
df.columns = df.columns.str.replace("[#@$]", "", regex=True)
dfhttps://cdn.nlark.com/yuque/0/2023/png/2235414/1683707107997-d70a5f55-4ed6-4d38-9a42-6eacd73d610e.png#averageHue=%23e7e7e7&clientId=ude4e34e4-ae1a-4&from=paste&height=131&id=u15cee52d&originHeight=131&originWidth=294&originalType=binary&ratio=1&rotation=0&showTitle=false&size=6858&status=done&style=stroke&taskId=ued9c702e-23b3-4ec6-9233-35d507527b8&title=&width=294
这种方式还支持通过正则表达式的方式替换,适合复杂替换的场景。
使用正则替换时,设置参数:regex=True
2. 列名的前缀

当遇到来自不同系统的同类数据时,合并之后会发现很多同样的列名,难以区分。
比如:
df1 = pd.DataFrame(
    {
      "坐标X": ,
      "坐标Y": ,
    },
)
df2 = pd.DataFrame(
    {
      "坐标X": ,
      "坐标Y": ,
    },
)

df = pd.concat(, axis=1)
dfhttps://cdn.nlark.com/yuque/0/2023/png/2235414/1683707901406-446d8948-20fc-4d6e-84fb-4e1f5b6474a0.png#averageHue=%23e8e2e2&clientId=u1843e1a2-48d7-4&from=paste&height=130&id=uad758a65&originHeight=130&originWidth=275&originalType=binary&ratio=1&rotation=0&showTitle=false&size=6759&status=done&style=stroke&taskId=uc5420a7f-8008-49c6-8ed6-464bc8b1549&title=&width=275
这时,我们可以在合并前给不同数据来源的数据的列名上加一个前缀(add_prefix)。
df1 = df1.add_prefix("A_")
df2 = df2.add_prefix("B_")

df = pd.concat(, axis=1)
dfhttps://cdn.nlark.com/yuque/0/2023/png/2235414/1683708417865-4c3d7512-5b73-4b1e-a380-55a7ac8f0d97.png#averageHue=%23e7e2e2&clientId=u1843e1a2-48d7-4&from=paste&height=126&id=u04e41750&originHeight=126&originWidth=348&originalType=binary&ratio=1&rotation=0&showTitle=false&size=6375&status=done&style=stroke&taskId=ud1d26aaa-bbe9-4b71-88b7-04f5f60940e&title=&width=348
3. 列名的后缀

除了添加前缀,也可以用添加后缀的方式(add_suffix)来区分不同数据源的数据。
df1 = df1.add_suffix("_A")
df2 = df2.add_suffix("_B")

df = pd.concat(, axis=1)
dfhttps://cdn.nlark.com/yuque/0/2023/png/2235414/1683708541185-f0273eb1-259a-49c6-b450-0d0043086a88.png#averageHue=%23e8e3e3&clientId=u1843e1a2-48d7-4&from=paste&height=136&id=u8f8f8afa&originHeight=136&originWidth=346&originalType=binary&ratio=1&rotation=0&showTitle=false&size=7081&status=done&style=stroke&taskId=u3f295c73-fef1-4c3f-b4f5-a88e90d7ff0&title=&width=346

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 【pandas小技巧】--修改列的名称