【问题标题】:find values of pandas columns that only has numbers查找只有数字的 pandas 列的值
【发布时间】:2016-03-01 20:46:25
【问题描述】:

我现在正在从 R 过渡到 Python,并且有一个示例 pandas 数据框,如下所示:

 df = pd.DataFrame({'x': pd.Series([1.0, 'Joe Young', '3M-Fit']), 'y': pd.Series(['1000', '1001', '1002'], dtype=int), 'z' : pd.Series(['Henry', 'Henry','Henry'])})

           x     y      z
0          1  1000  Henry
1  Joe Young  1001  Henry
2     3M-Fit  1002  Henry

当我查看第一列每一行的数据类型时,它是 str 和 float 的组合:

    df['x'].map(lambda x: type(x))

0    <type 'float'>
1      <type 'str'>
2      <type 'str'>
Name: x, dtype: object

我想做的是打印那些 type(x) 是浮点数的数据帧行(包括 x 和 y 列)。因此,在这种情况下,我希望示例输出为:

               x     y      z
0              1    1000   Henry

我看了herehere。但它要么适用于完整的数据框,要么给出 True 和 False 值。我想将它应用于特定感兴趣列的每一行,并希望在所有列中为这些感兴趣的行获取实际值。

【问题讨论】:

  • 但是您的第二列是字符串,除非您转换它们,否则它们不是数字

标签: python pandas dataframe


【解决方案1】:

这应该为您完成这项工作。

df[df.applymap(np.isreal).all(1)]

它定义了所有真实的行并且只选择那些行。


略微改进以自动考虑所有数字类型,并考虑问题中的编辑。特别是对于编辑,您可以明确地将测试限制为感兴趣的列。

import numbers
df[df[['x','y']].applymap(lambda x: isinstance(x, numbers.Number)).all(1)]

【讨论】:

  • 谢谢...但是如果给定行的所有列都是数字的,这将起作用。但是,假设我有另一列全是字符串。在这种情况下,此解决方案将不起作用。我已经更新了示例数据框以考虑到这一点。知道在更新数据框示例的情况下它将如何工作吗?
  • @CraigBing 对于这种情况,您可以明确地将测试限制在感兴趣的列;请参阅答案中的编辑。还要注意自动考虑所有数字类型的改进。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-07
  • 2020-07-18
  • 2020-03-11
  • 2017-12-31
  • 1970-01-01
  • 2012-08-18
  • 2016-04-23
相关资源
最近更新 更多