gpt4 book ai didi

python - Pandas DataFrame 在写入操作后包含 NaN

转载 作者:太空狗 更新时间:2023-10-29 21:49:37 28 4
gpt4 key购买 nike

这是我的问题的最小工作示例:

import pandas as pd

columns = pd.MultiIndex.from_product([['a', 'b', 'c'], range(2)])
a = pd.DataFrame(0.0, index=range(3),columns=columns, dtype='float')
b = pd.Series([13.0, 15.0])

a.loc[1,'b'] = b # this line results in NaNs
a.loc[1,'b'] = b.values # this yields correct behavior

为什么第一个赋值不正确?这两个系列似乎具有相同的索引,因此我认为它应该会产生正确的结果。

我正在使用 pandas 0.17.0。

最佳答案

当你写作时

a.loc[1,'b'] = b

b是一个Series,索引为b必须与 a.loc[1,'b'] 生成的索引器完全匹配为了 b 中的值复制到a .然而,事实证明,当a.columnsMultiIndex , the indexer for a.loc[1,'b'] 是:

(Pdb) p new_ix
Index([(u'b', 0), (u'b', 1)], dtype='object')

b 的索引是

(Pdb) p ser.index
Int64Index([0, 1], dtype='int64')

他们不匹配,因此

(Pdb) p ser.index.equals(new_ix)
False

由于值未对齐,the code branch you fall into赋值

(Pdb) p ser.reindex(new_ix).values
array([ nan, nan])

我通过添加 pdb.set_trace() 找到了这个到你的代码:

import pandas as pd

columns = pd.MultiIndex.from_product([['a', 'b', 'c'], range(2)])
a = pd.DataFrame(0.0, index=range(3),columns=columns, dtype='float')
b = pd.Series([13.0, 15.0])
import pdb
pdb.set_trace()
a.loc[1,'b'] = b # this line results in NaNs
a.loc[1,'b'] = b.values # this yields correct behavior

然后简单地在“高层次”单步执行它并找到 the problem occurs in

        if isinstance(value, ABCSeries):
value = self._align_series(indexer, value)

然后再次单步执行它(使用更细齿的梳子),断点从调用 self._align_series(indexer, value) 的行开始.


请注意,如果您更改 b 的索引也是一个 MultiIndex:

b = pd.Series([13.0, 15.0], index=pd.MultiIndex.from_product([['b'], [0,1]]))

然后

import pandas as pd

columns = pd.MultiIndex.from_product([['a', 'b', 'c'], range(2)])
a = pd.DataFrame(0.0, index=range(3),columns=columns, dtype='float')
b = pd.Series([13.0, 15.0], index=pd.MultiIndex.from_product([['b'], [0,1]]))
a.loc[1,'b'] = b
print(a)

产量

   a      b      c   
0 1 0 1 0 1
0 0 0 0 0 0 0
1 0 0 13 15 0 0
2 0 0 0 0 0 0

关于python - Pandas DataFrame 在写入操作后包含 NaN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33661091/

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