即使没有在原位置执行,带fillna()
的行也会发出警告。这是为什么?
import pandas as pd
import numpy as np
tuples = [('foo', 1), ('foo', 2), ('bar', 1), ('bar', 2)]
index = pd.MultiIndex.from_tuples(tuples)
df = pd.DataFrame(np.random.randn(2, 4), columns=index)
df.loc[0, ('foo', 1)] = np.nan
# this works without warning
# df = pd.DataFrame({'foo': [1, np.nan, 3], 'bar': [np.nan, 22, 33]]})
df1 = df[['foo', 'bar']]
# df1 = df[['foo', 'bar']].copy() # this does not help
filled = df1.fillna({'foo': 100, 'bar': 200}, inplace=False)
如果
foo
和bar
是普通列而不是多索引的,则不会出现此问题。 最佳答案
这是一个误报,因此不应在此处提出警告。我认为问题是fillna
无法理解“ foo”和“ bar”适用于您的MultiIndex列的特定级别。
我建议在实现此功能之前,在fillna
中调用GroupBy
作为解决方法。
fill = {'foo': 100, 'bar': 200}
df1.groupby(level=0, axis=1).apply(lambda x: x.fillna(fill[x.name]))
foo bar
1 2 1 2
0 100.000000 1.040531 -1.516983 -0.866276
1 -0.055035 -0.107310 1.365467 -0.097696
另外,要直接使用
fillna
,请指定一个元组的字典(因为MultiIndex),df1.fillna({('foo', 1): 100, ('foo', 2): 100})
foo bar
1 2 1 2
0 100.000000 1.040531 -1.516983 -0.866276
1 -0.055035 -0.107310 1.365467 -0.097696
关于python - 带有MultiIndex DataFrame的fillna的Pandas SettingWithCopyWarning,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56394686/