在熊猫数据框列中查找非数字值

Posted

技术标签:

【中文标题】在熊猫数据框列中查找非数字值【英文标题】:Find non-numeric values in pandas dataframe column 【发布时间】:2020-06-14 18:01:54 【问题描述】:

我在包含数字和字符串的数据框中有一列。所以我通过df.column.replace(["A", "B", "C", "D"], [1, 2, 3, 4], inplace=True)用数字替换了字符串。

但该列仍然是 dtype "object"。我无法对列进行排序(TypeError 错误:'str' 和 'int' 的实例之间不支持'

现在我如何识别那些是字符串的数字?我尝试了print(df[pd.to_numeric(df['column']).isnull()]),它按预期返回了一个空数据框。但是我读到这在我的情况下不起作用(实际数字保存为字符串)。那么如何识别那些保存为字符串的数字呢?

如果一列仅包含 REAL 数字(int 或 float),它会自动更改为 dtype int 或 float,我对吗?

谢谢!

【问题讨论】:

您可以将数据框发布到问题中吗?你可以edit这个问题并更新它。 【参考方案1】:

您可以将pd.to_numeric 与以下内容一起使用:

df['column'] = pd.to_numeric(df['column'], errors='coerce')

对于errors 参数,您几乎没有选择,请参阅参考文档here

【讨论】:

【参考方案2】:

你可以改变数据类型

    df.column.dtype=df.column.astype(int)

【讨论】:

它说:“AttributeError: can't set attribute”...我认为有字符串但是如何找到它们? print(set(df.column)) 它将显示唯一值,因此您可以找到添加了数值的字符串 好吧,我猜有一些字符串和浮点数(例如 '1' 或 5.0):0, 1, 2, 3, 4, 5.0, 6, 7, 8, 9, 10 , 11, 12, 13, '1', 15, 16, 17, 18, 19, 20, 21, 22, 14, 23, '3', 25, 27, 28, 26, 30, 31, 32, 33 , 29, 35, 36, 38, 39, 40, 42, '17', '27', '11', '2', '9', '7', '4', 99, '6', - 1, 24, '5', -2 用 df.column = df.column.astype(int) 可以解决问题,非常感谢!

以上是关于在熊猫数据框列中查找非数字值的主要内容,如果未能解决你的问题,请参考以下文章

使用熊猫在数据框列中添加缺失时间

如何在熊猫数据框列中选择一系列值?

如何迭代熊猫数据框列中的元素?

如何从 Python 的数据框列中的字符串中删除非字母数字字符?

用另一个值替换熊猫数据框列中的几个值

如何在熊猫数据框列中获取 NaN 观察的频率 [重复]