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

标签 python pandas

对我来说,以下代码片段将 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

首先选择列所在的子帧(眼睛,右侧):

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/

相关文章:

Python(使用opencv保存图像的简单应用程序)

python - 属性错误: 'module' object has no attribute 'cache'

python - 合并具有两个键列和重复键出现的数据帧(pandas)

python - 使用 numpy 和 pandas 加速 virtualenv 创建

python - 加快 Pandas 数据框中字符串的整数编码

python - 使用包含相同长度的列表验证字典

python - fmin_cg 函数用于最小化神经网络成本函数

python - Pandas Dataframe 中多列的普通最小二乘回归

python - pandas.DataFrame.sum() 参数 "min_count"相当于 pandas 0.22 之前的版本

python - 删除期末值