gpt4 book ai didi

python - 更改数据帧索引后的 pandas 版本 0.16.0 所有值都变为 NaN

转载 作者:太空狗 更新时间:2023-10-30 00:55:19 24 4
gpt4 key购买 nike

我正在使用 ipython notebook 并遵循 pandas cookbook 示例版本 0.16.0。我在第 237 页时遇到麻烦。我制作了这样的数据框

from pandas import *
data1=DataFrame({'AAA':[4,5,6,7],'BBB':[10,20,30,40],'CCC':[100,50,-30,-50]})

然后,我这样做了,试图改变索引:

df=DataFrame(data=data1,index=(['a','b','c','d']))

但我得到的是一个所有值为 NaN 的数据框!任何人都知道为什么以及如何解决它?我还尝试使用 set_index 函数,但它给了我错误。

非常感谢! enter image description here

最佳答案

如果你想改变索引,那么要么使用reindex,要么直接赋值给索引:

In [5]:

data1=pd.DataFrame({'AAA':[4,5,6,7],'BBB':[10,20,30,40],'CCC':[100,50,-30,-50]})
print(data1)
df=pd.DataFrame(data=data1)
df.index = ['a','b','c','d']
df
AAA BBB CCC
0 4 10 100
1 5 20 50
2 6 30 -30
3 7 40 -50
Out[5]:
AAA BBB CCC
a 4 10 100
b 5 20 50
c 6 30 -30
d 7 40 -50

我不知道这是否是一个错误,但如果您执行以下操作,它就会起作用:

In [7]:

df=pd.DataFrame(data=data1.values,index=(['a','b','c','d']))
df
Out[7]:
0 1 2
a 4 10 100
b 5 20 50
c 6 30 -30
d 7 40 -50

因此,如果您将数据分配给值而不是 df 本身,则 df 不会尝试与传入的索引对齐

编辑

在逐步执行此处的代码后,问题是它使用传递的索引重新索引 df,我们可以通过执行以下操作来重现此行为:

In [46]:

data1 = pd.DataFrame({'AAA':[4,5,6,7],'BBB':[10,20,30,40],'CCC':[100,50,-30,-50]})
data1.reindex_axis(list('abcd'))
Out[46]:
AAA BBB CCC
a NaN NaN NaN
b NaN NaN NaN
c NaN NaN NaN
d NaN NaN NaN

这是因为它进入 df 构造函数检测到它是 BlockManager 的一个实例并尝试构造一个 df:

单步执行代码,我看到它在 frame.py 中到达这里:

        if isinstance(data, BlockManager):
mgr = self._init_mgr(data, axes=dict(index=index, columns=columns),
dtype=dtype, copy=copy)

然后在 generic.py 中结束:

119         def _init_mgr(self, mgr, axes=None, dtype=None, copy=False):
120 """ passed a manager and a axes dict """
121 for a, axe in axes.items():
122 if axe is not None:
123 mgr = mgr.reindex_axis(
124 -> axe, axis=self._get_block_manager_axis(a), copy=False)

issue现在已经发布了这个

更新 这是预期的行为,如果您传递索引,那么它将使用该索引重新索引来自@Jeff 的传入 df

This is the defined behavior, to reindex the provided input to the passed index and/or columns .

查看相关Issue

关于python - 更改数据帧索引后的 pandas 版本 0.16.0 所有值都变为 NaN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29706825/

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