python - 如何在 dtype=str 的数据帧上使用 dropna?

标签 python pandas dataframe nan missing-data

当我有这样的数据框时:

import pandas as pd
import numpy as np    

df = pd.DataFrame(np.nan, index=list('abc'), columns=list('DEF'), dtype=float)
df.set_value('a', 'D', 4.0)
df.set_value('b', 'E', 10.0)

     D     E   F
a  4.0   NaN NaN
b  NaN  10.0 NaN
c  NaN   NaN NaN

我可以通过以下调用轻松摆脱仅包含 NaN 的行:

df = df.dropna(how='all')

产生

     D     E   F
a  4.0   NaN NaN
b  NaN  10.0 NaN

如何在使用 dtype=str 初始化的数据帧上做同样的事情?以下不起作用:

df2 = pd.DataFrame(np.nan, index=list('abc'), columns=list('DEF'), dtype='str')
df2.set_value('a', 'D', 'foo')
df2.set_value('b', 'E', 'bar')

     D    E  F
a  foo    n  n
b    n  bar  n
c    n    n  n

然后是命令

df2 = df2.dropna(how='all')

返回未修改的数据框。

最佳答案

先调用df.replace,再调用df.dropna:

In [1576]: df2.replace('n', np.nan).dropna(how='all')
Out[1576]: 
     D    E   F
a  foo  NaN NaN
b  NaN  bar NaN

这似乎是最直接的选择。据我所知,一旦您使用 dtype=str 初始化您的数据框,您就丢失了 NaN,因此这更像是一个最佳猜测替换(您可以使用合法的n 的非 NaN 条目被标记为误报并被删除)。


这是与 John Galt 类似的解决方案,但保留了 NaN:

In [1584]: df2[~df2.eq('n')].dropna(how='all')
Out[1584]: 
     D    E    F
a  foo  NaN  NaN
b  NaN  bar  NaN

扩展 Andrew L 的评论,您不需要转换为 dtype=str 来设置值。您可以改用基于 .loc 的索引:

In [1586]: df2 = pd.DataFrame(np.nan, index=list('abc'), columns=list('DEF'))
      ...: df2.loc['a', 'D'] = 'foo'
      ...: df2.loc['b', 'E'] = 'bar'
      ...: 

In [1587]: df2
Out[1587]: 
     D    E   F
a  foo  NaN NaN
b  NaN  bar NaN
c  NaN  NaN NaN

现在,

In [1588]: df2.dropna(how='all')
Out[1588]: 
     D    E   F
a  foo  NaN NaN
b  NaN  bar NaN

关于python - 如何在 dtype=str 的数据帧上使用 dropna?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45817271/

相关文章:

python - 如何使用 Python 从 Selenium 的重定向链中获取中间 URL?

python - 在 vscode 中调试 pytest unitest 导致 AttributError sys has no attribute __breakpointhook__ on exit

python - pandas 中没有标题列的合并

python - 合并数据框的两列,然后进行比较

scala - Spark 标度 : select column name from other dataframe

python - 迭代一列中的项目,同时引用另一列中的标签

python - 为什么我的 PanelND 工厂抛出 KeyError?

python - 根据需要创建尽可能多的列,并使用它们将 .apply() 的输出放置在 Pandas 数据框中

Python:多维 Pandas 数据框

python - 从另一个数据框中减去一个 Pandas 数据框中的属性值