gpt4 book ai didi

python - Pandas 数据框中的 FutureWarning

转载 作者:太空宇宙 更新时间:2023-11-04 07:49:24 25 4
gpt4 key购买 nike

我有一个示例 python 代码:

import pandas as pd
ddf = pd.DataFrame({'col1' : ['A', 'A', 'B'],
'Id' : [3,1,2],
'col3': ['x','a','b']})
ddf.index=ddf['Id']
ddf.sort_values(by='Id')

上面的代码片段产生了“FutureWarning: 'Id' is both an index level and a column label.”默认为列,但这会在未来的版本中引发歧义错误。当我在最新版本的 python 下尝试这个时,它确实变成了一个错误。我对 python 和 Pandas 很陌生。我该如何解决这个问题?

最佳答案

这里最好的方法是使用 DataFrame.set_index 将列 Id 转换为 index为了避免 index.name 与列名之一相同:

ddf = pd.DataFrame({'col1' : ['A', 'A', 'B'],
'Id' : [3,1,2],
'col3': ['x','a','b']})
ddf = ddf.set_index('Id')

print (ddf.index.name)
Id
print (ddf.columns)
Index(['col1', 'col3'], dtype='object')

更适合按索引排序的是 DataFrame.sort_index :

print (ddf.sort_index())
col1 col3
Id
1 A a
2 B b
3 A x

您的解决方案有效,如果更改 index.name 不同:

ddf = pd.DataFrame({'col1' : ['A', 'A', 'B'],
'Id' : [3,1,2],
'col3': ['x','a','b']})
ddf.index=ddf['Id']

print (ddf.index.name)
Id
print (ddf.columns)
Index(['col1', 'Id', 'col3'], dtype='object')

通过DataFrame.rename_axis设置不同的index.name或由标量设置:

ddf = ddf.rename_axis('newID')
#alternative
#ddf.index.name = 'newID'

print (ddf.index.name)
newID
print (ddf.columns)
Index(['col1', 'Id', 'col3'], dtype='object')

所以现在可以区分索引级别和列名称,因为 sort_values 与两者一起工作:

print(ddf.sort_values(by='Id'))
col1 Id col3
newID
1 A 1 a
2 B 2 b
3 A 3 x

print (ddf.sort_values(by='newID'))
#same like sorting by index
#print (ddf.sort_index())
col1 Id col3
newID
1 A 1 a
2 B 2 b
3 A 3 x

关于python - Pandas 数据框中的 FutureWarning,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57558253/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com