【发布时间】:2017-03-16 13:28:21
【问题描述】:
首先,创建这个 DataFrame:
df = pd.DataFrame([[1,-2,3],[4,5,-6],[-7,8,9]],
columns=pd.MultiIndex.from_tuples(
[('foo', 'bar'), ('foo', 'baz'), ('ignore', 'other')]))
即:
foo ignore
bar baz other
0 1 -2 3
1 4 5 -6
2 -7 8 9
现在,尝试用 NAN 替换 foo 下的负值:
df.foo[df.foo < 0] = np.nan
除了打印警告之外什么都不做:
SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
好的,让我们这样做:
df.loc[:,'foo'][df.foo < 0] = np.nan
这不会打印警告,但它也什么都不做!
但如果我们使用非 NAN 值,它会起作用:
df.loc[:,'foo'][df.foo < 0] = 666
现在我有:
foo ignore
bar baz other
0 1 666 3
1 4 5 -6
2 666 8 9
但我想填写 NAN,而不是 666。有什么简单的方法可行吗?
【问题讨论】:
标签: pandas slice nan hierarchical-data