gpt4 book ai didi

python - MultiIndex DataFrame 中的 Series.fillna() 不填充;这是一个错误吗?

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

对我来说,以下代码片段将 NaN 值保留为 NaN:

import pandas
a = [12, 23]
b = [123, None]
c = [1234, 2345]
d = [12345, 23456]
tuples = [('eyes', 'left'), ('eyes', 'right'), ('ears', 'left'), ('ears', 'right')]
events = {('eyes', 'left'): a, ('eyes', 'right'): b, ('ears', 'left'): c, ('ears', 'right'): d}
multiind = pandas.MultiIndex.from_tuples(tuples, names=['part', 'side'])
zed = pandas.DataFrame(events, index=['a', 'b'], columns=multiind)
zed['eyes']['right'].fillna(value=555, inplace=True)

我得到:

part  eyes         ears       
side left right left right
a 12 123 1234 12345
b 23 NaN 2345 23456

如果我在将 inplace 设置为 False 的情况下运行此程序,返回的 Series 会将 NaN 替换为 555。我可以使用此解决方法,但一方面,如果这是一个错误,我想报告它,另一方面,即使是变通方法也不适用于我的实际应用程序。

所以问题是我是否误解了 fillna() 或者这是一个错误。谢谢!

编辑:我在 openSUSE 13.1 上使用 pandas 0.12.0、numpy 1.8.0 和 python 2.7.5。

最佳答案

我会在这里使用 update ,因为它更明确......并且避免了整个 updating a copy thing

先选中column所在的subframe(眼睛,右):

In [11]: zed.loc[:, [('eyes', 'right')]]
Out[11]:
part eyes
side right
a 123
b NaN
[2 rows x 1 columns]

Fill in the NaN 为 555,并更新:

In [12]: zed.loc[:, [('eyes', 'right')]].fillna(555)
Out[12]:
part eyes
side right
a 123
b 555
[2 rows x 1 columns]

In [13]: zed.update(zed.loc[:, [('eyes', 'right')]].fillna(555))

In [14]: zed
Out[14]:
part eyes ears
side left right left right
a 12 123 1234 12345
b 23 555 2345 23456
[2 rows x 4 columns]

类似于 chaining in an assignment :

zed['eyes']['right'].fillna(value=555, inplace=True)
zed.loc[:,[('eyes', 'right')]].fillna(value=555, inplace=True)

可能有时会起作用,但不要指望它(@Jeff 建议如果所有列都是 float 的,它可能会起作用!),您很可能最终会 modifying a copy而不是原始框架。

关于python - MultiIndex DataFrame 中的 Series.fillna() 不填充;这是一个错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20508968/

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