【问题标题】:Data frame renaming columns [duplicate]数据框重命名列[重复]
【发布时间】:2023-11-15 18:14:01
【问题描述】:

CSV 文件中的数据样本

Model,Displ,Cyl,Trans,Drive,Fuel,Cert Region,Stnd,Stnd Description,Underhood ID,Veh Class,Air Pollution Score,City MPG,Hwy MPG,Cmb MPG,Greenhouse Gas Score,SmartWay,Comb CO2

ACURA RDX,3.5,6,SemiAuto-6,2WD,Gasoline,FA,T3B125,Federal Tier 3 Bin 125,JHNXT03.5GV3,small SUV,3,20,28,23,5,No,386
import pandas as pd
df_18 = pd.read_csv('file name')

请求: 重命名所有列标签以用下划线替换空格并将所有内容转换为小写。 下面的代码确实有效,我不知道为什么

df_18.rename(str.lower().str.strip().str.replace(" ","_"),axis=1,inplace=True)

【问题讨论】:

  • df.columns = df.columns.str.lower().str.strip().str.replace(' ', '_') 是链接.str 函数的正确方法。

标签: python dataframe rename


【解决方案1】:

可以直接将列名列表赋值给pandas.DataFrame.columns;您可以在每个列名的列表理解中执行所需的操作,即lowerstripreplace,并将其分配回dataframe.columns

df_18.columns = [col.lower().strip().replace(" ","_") for col  in df_18]

输出:

       model  displ  cyl  ... greenhouse_gas_score smartway comb_co2
0  ACURA RDX    3.5    6  ...                    5       No      386
[1 rows x 18 columns]

【讨论】:

    【解决方案2】:

    重命名列的方法有很多种,

    reference for renaming columns

    reference for replace string

    你可以使用下面的代码。

    df_18.columns=[col.lower().replace(" ","_")  for col in df_18.columns]
    

    【讨论】:

    • 我收到了这个作为解决方案,但我不明白它是如何工作的 df_18.rename(columns=lambda x: x.strip().lower().replace(" ", " _"), inplace=True) 函数是如何获得 x 属性的?以及所有列如何变化
    • 在数据框的重命名方法中,列参数需要一个字典,即old_value:new_value,或者它可以有一个映射列名的函数,并且inplace=True将changea作为永久的,(默认是假的)pandas.pydata.org/pandas-docs/stable/reference/api/…
    • 我理解第一部分,但是“或者它可以有一个映射列名的函数”我无法将它与前面的代码联系起来!!
    • lambda x: x.strip().lower().replace(" ", "_"),这个lambda函数会获取df_18的列名,并在对应的列中返回带有小写和空格的名称将替换为 _
    【解决方案3】:
    for column in df_18.columns:
        new_column_name = column.lower().strip().replace(" ","_")
    
        if new_column_name != column:
            df_18[new_column_name] = df_18[column]
            del df_18[column]
    

    【讨论】:

    • 这种方法有错误。您最终将删除该列。如果源列已经是小写并且没有_,它将被删除。
    • 公平点,编辑并添加了一个条件以防止这种情况发生