Pandas - DataFrame reindex 函数返回警告
Posted
技术标签:
【中文标题】Pandas - DataFrame reindex 函数返回警告【英文标题】:Pandas - DataFrame reindex function returns a warning 【发布时间】:2016-12-09 13:07:12 【问题描述】:代码有什么问题?: 它返回一个警告:
警告(来自警告模块):文件 “C:\Python27\lib\site-packages\numpy\core\numeric.py”,第 2515 行 return bool(asarray(a1 == a2).all()) FutureWarning:元素比较失败;而是返回标量,但将来会 进行元素比较
import pandas as pd
import numpy as np
Data1 = 'State':['Ohio','Ohio','Ohio','Nevada','Nevada'],'Year':[2000,2001,2002,2001,2002],'POP':[1.5,1.7,3.6,2.4,2.9]
Frame4 =pd.DataFrame(Data1)
print('\n')
print Frame4
Frame5 = Frame4.reindex(['a','b','c','d','e'])
print Frame5
my o/p
POP State Year
0 1.5 Ohio 2000
1 1.7 Ohio 2001
2 3.6 Ohio 2002
3 2.4 Nevada 2001
4 2.9 Nevada 2002
Warning (from warnings module):
File "C:\Python27\lib\site-packages\numpy\core\numeric.py", line 2515
return bool(asarray(a1 == a2).all())
FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison
POP State Year
a NaN NaN NaN
b NaN NaN NaN
c NaN NaN NaN
d NaN NaN NaN
e NaN NaN NaN
【问题讨论】:
【参考方案1】:当您尝试更改索引轴的名称时,必须使用rename
而不是reindex
。
Frame5 = Frame4.rename(0:'a', 1:'b', 2:'c', 3:'d', 4:'e')
print(Frame5)
POP State Year
a 1.5 Ohio 2000
b 1.7 Ohio 2001
c 3.6 Ohio 2002
d 2.4 Nevada 2001
e 2.9 Nevada 2002
应用reindex
的目的是为了在新的索引选择逻辑中对齐数据框的索引。
默认情况下,新索引中在数据框中没有对应记录的值被分配NaN
。
因此,当您将新索引逻辑指定为list('abcde')
时,它会检查所有索引值但找不到匹配项,因为先前的索引已在range(0,4)
中。因此,它返回了Nans
。
【讨论】:
【参考方案2】:试试这个:
Frame4 =pd.DataFrame(Data1)
print('\n')
print Frame4
Frame4.index = ['a','b','c','d','e']
print Frame4
POP State Year
0 1.5 Ohio 2000
1 1.7 Ohio 2001
2 3.6 Ohio 2002
3 2.4 Nevada 2001
4 2.9 Nevada 2002
POP State Year
a 1.5 Ohio 2000
b 1.7 Ohio 2001
c 3.6 Ohio 2002
d 2.4 Nevada 2001
e 2.9 Nevada 2002
【讨论】:
以上是关于Pandas - DataFrame reindex 函数返回警告的主要内容,如果未能解决你的问题,请参考以下文章
pandas.DataFrame.loc好慢,怎么遍历访问DataFrame比较快
将 Pandas Multiindexed DataFrame 与 Singleindexed Pandas DataFrame 合并
pandas.DataFrame.loc好慢,怎么遍历访问DataFrame比较快