从列表中更改 Pandas Dataframe 中的列名
Posted
技术标签:
【中文标题】从列表中更改 Pandas Dataframe 中的列名【英文标题】:Change column names in Pandas Dataframe from a list 【发布时间】:2018-01-10 03:20:21 【问题描述】:是否可以使用列表中的数据更改列名?
df = pd.DataFrame([[1, 1.0, 2.3,0.2,0.53], [2, 3.35, 2.0,0.2,0.65], [2,3.4,
2.0,0.25,0.55], [3,3.4,2.0,0.25,0.55], [1,3.4,2.0,0.25,0.55],
[3,3.4,2.0,0.25,0.55]],
columns=["ID", "A", "B","C","D"])\
.set_index('ID')
我的新标签如下:
New_Labels=['NaU', 'MgU', 'AlU', 'SiU']
是否可以使用上述列表中的数据更改名称?我的原始数据集有 100 列,我不想为每一列手动操作。
我正在尝试使用 df.rename 进行以下操作,但不断出现错误。谢谢!
【问题讨论】:
df.columns[1:] = New_Labels
?
【参考方案1】:
df = pd.DataFrame([[1, 1.0, 2.3,0.2,0.53], [2, 3.35, 2.0,0.2,0.65], [2,3.4,
2.0,0.25,0.55], [3,3.4,2.0,0.25,0.55], [1,3.4,2.0,0.25,0.55],
[3,3.4,2.0,0.25,0.55]],
columns=["ID", "A", "B","C","D"])\
.set_index('ID')
New_Labels=['NaU', 'MgU', 'AlU', 'SiU']
df.columns = New_Labels
这将使df
看起来像这样:
NaU MgU AlU SiU
ID
1 1.00 2.3 0.20 0.53
2 3.35 2.0 0.20 0.65
2 3.40 2.0 0.25 0.55
3 3.40 2.0 0.25 0.55
1 3.40 2.0 0.25 0.55
3 3.40 2.0 0.25 0.55
【讨论】:
【参考方案2】:你可以用这个:
df.columns = New_Labels
【讨论】:
【参考方案3】:df.columns = New_Labels
注意新列名的顺序。
【讨论】:
【参考方案4】:使用rename 是一种形式上更正确的方法。您只需要提供一个字典,将您当前的列名映射到新的列名(即使在列错位的情况下也能保证预期的结果)
new_names = 'A':'NaU', 'B':'MgU', 'C':'Alu', 'D':'SiU'
df.rename(index=str, columns=new_names)
请注意,您可以为要替换的唯一名称提供条目,其余的将保持不变。
【讨论】:
【参考方案5】:接受的rename
答案很好,但主要用于映射旧→新名称。如果我们只想用新列表清除列名,则无需创建中间映射字典。直接使用set_axis
即可。
set_axis
要将列表设置为列,请使用set_axis
和axis=1
(默认axis=0
设置索引值):
df.set_axis(New_Labels, axis=1)
# NaU MgU AlU SiU
# ID
# 1 1.00 2.3 0.20 0.53
# 2 3.35 2.0 0.20 0.65
# 2 3.40 2.0 0.25 0.55
# 3 3.40 2.0 0.25 0.55
# 1 3.40 2.0 0.25 0.55
# 3 3.40 2.0 0.25 0.55
注意set_axis
类似于直接修改df.columns
,但set_axis
允许方法链接,例如:
df.some_method().set_axis(New_Labels, axis=1).other_method()
理论上,set_axis
也应该提供比直接修改属性更好的错误检查,尽管我目前找不到具体示例。
【讨论】:
这应该是公认的答案。它允许您使用方法链,这意味着您不必创建临时的df
来修改属性。 .rename
使用起来不太自然,因为它需要前面的列名。以上是关于从列表中更改 Pandas Dataframe 中的列名的主要内容,如果未能解决你的问题,请参考以下文章
Pandas:如何从给定(行,列)对列表的 DataFrame 中检索值?