python 3.9.13,pandas 2.1.3
blahblah.py:29: FutureWarning: The behavior of DataFrame.idxmax with all-NA values, or any-NA and skipna=False, is deprecated. In a future version this will raise ValueError df['max days'] = df[columns].idxmax(axis=1)
字符串
相同的警告:skipna=False
或skipna=True
尽管有警告,程序仍按预期运行。
有人知道这是怎么回事吗?谷歌没有返回任何有用的信息。
1条答案
按热度按时间ki0zmccv1#
警告很简单,它说它会在两种情况下抛出警告:
1.您的列/行包含所有NA值
1.列/行至少包含一个NA值,并且指定
skipna=False
解决方案也很简单:
skipna=True
Series.idxmax()
示例首先以
Series.idxmax()
为例。假设我有一个下面的框架
字符串
col1
包含所有NA值col2
包含一个NA值row0
包含所有NA值row1
包含一个NA值当我使用
df['col1'].idxmax()
时,它会抛出以下错误:型
对于
df['col1'].idxmax(skipna=True)
,它是型
问题是
col1
包含所有NA值,所以它匹配我的case 1,并且无论您添加skipna
都抛出警告。对于
col2
包含一个NA值的df['col2'].idxmax(skipna=False)
,它匹配case 2,您将得到警告型
df['col2'].idxmax()
没有给予任何警告的原因是Series.idxmax()
的默认值为True。DataFrame.idxmax()
示例回到
DataFrame.idxmax(axis=1)
,问题是其中一行包含所有NA值,就像我的示例中的row 0
。型
在这种情况下,您需要首先处理所有NA值行,例如删除这些行。
的字符串
删除包含
df
中所有NA值的行后,我们可以安全地获得out.idxmax(axis=1)
列上第一次出现的最大值的索引。注意,
out
的行命中了case 2,如果我们执行out.idxmax(axis=1, skipna=False)
,你也会得到警告型