在 Pandas 中合并数据后重命名列

Renaming columns after merging data in Pandas

提问人:Vedant Monger 提问时间:10/2/2020 更新时间:11/7/2023 访问量:3527

问:

我有两个 Pandas 系列,我使用以下代码合并了它们:

HS4_Tariffs_16=pd.concat([df_tariff_HS4_16_PT,df_tariff_HS4_16_MFN],axis=1)

如果您想知道为什么我使用 concat 代替 merge,那么当我使用 merge 时,会出现错误“Series”对象没有属性“merge”。 所以无论如何,我使用 concat 合并了两个系列,从而产生了一个 DataFrame。此后,我使用以下代码重置索引:

HS4_Tariffs_16.reset_index()

现在,当我尝试使用代码重命名列时,真正的问题出现了:

HS4_Tariffs_16=HS4_Tariffs_16.rename(columns={'ProductCode':'HSCode'})

它没有重命名列,而是将列转换为索引。输出如下所示:

      Preferential tariff for APTA countries    MFN duties (Applied)
ProductCode         
101     0.3     0.3
102     0.3     0.3
103     0.3     0.3
104     0.3     0.3
105     0.3     0.3
...     ...     ...
9702    0.1     0.1
9703    0.1     0.1
9704    0.0     0.0
9705    0.1     0.1
9706    0.1     0.1

1224 rows × 2 columns

如果我想要的最终结果是名为“ProductCode”的列重命名为“HSCode”的数据帧,您能否告诉我我需要更正代码的哪一部分。

Python Pandas 重命名

评论

0赞 noah 10/2/2020
在尝试重命名之前,df 是什么样子的?我不认为错误出在您的重命名中
7赞 Cameron Riddell 10/2/2020
实际上从未重置索引。更改为:然后运行 your 并查看是否得到预期的结果。HS4_Tariffs_16HS4_Tariffs_16 = HS4_Tariffs_16.reset_index()rename
0赞 Vedant Monger 10/2/2020
非常感谢@CameronRiddell。成功了!
2赞 Trenton McKinney 10/2/2020
我投票关闭它,因为错别字/不可重现

答:

0赞 user47467 12/30/2020 #1

以下方法可能有效,而无需重置索引。当您重命名列时,它可能会将其设置为索引,因为您将框架重命名为其本身,而 Pandas 有时就是这样奇怪的!

HS4_Tariffs_16.rename(columns={'ProductCode':'HSCode'}, inplace=True)
0赞 chsws 8/19/2022 #2

可以使用该方法更改索引列的名称。这样可以避免更改数据并添加可能不必要的新索引列。rename_axis

HS4_Tariffs_16.rename_axis(index={'ProductCode':'HSCode'}, inplace=True)

您还可以使用圆括号在一个步骤中完成此操作,以获得更简洁的代码:

HS4_Tariffs_16 = (
    pd.concat([df_tariff_HS4_16_PT, df_tariff_HS4_16_MFN], axis=1)
    .rename_axis(index={'ProductCode':'HSCode'})
)
0赞 SERGIO 10/20/2022 #3

这应该有效

df=df.rename({'Old_name' : 'New_name'}, axis=1)

In your case 

HS4_Tariffs_16= HS4_Tariffs_16.rename({'ProductCode':'HSCode'}, axis=1)

或者,您可以使用所需的名称创建副本并删除原始副本,然后:

df['renamed']=df['oldname'].copy()
df= df.drop('oldname', axis=1)
0赞 Lorenzo Bassetti 1/4/2023 #4

您可以尝试以下两种可能的解决方案:

HS4_Tariffs_16 = HS4_Tariffs_16.reset_index().rename(columns={"ProductCode": "HSCode"})

HS4_Tariffs_16.reset_index(inplace=True) 
HS4_Tariffs_16.rename(columns={"ProductCode": "HSCode"}, inplace=True)
0赞 nonsinecura 8/8/2023 #5

我认为当您重置索引时会出现问题。试试这个:

HS4_Tariffs_16.reset_index(drop = True)
0赞 Farooq Zaman 11/7/2023 #6

简单的解决方法是:使用结果中的值数组,并从中创建一个新的 DataFrame,并传递您选择的新列名,代码片段可能如下所示。

    HS4_Tariffs_16=pd.concat([df_tariff_HS4_16_PT,df_tariff_HS4_16_MFN],axis=1)
    HS4_Tariffs_16=pd.DataFrame(HS4_Tariffs_16.values, columns=["new_col_name1", "new_col_name_2"])