python - 如何在 Pandas DataFrame 中查找包含数字的字符串数据类型

标签 python pandas string numeric

我有一个包含两列的 DataFrame。一列包含字符串值,这些值可能包含也可能不包含数字(整数或 float )。

示例:

import pandas as pd
import numpy as np

data = [('A', '>10'),
        ('B', '10'),
        ('C', '<10'),
        ('D', '10'),
        ('E', '10-20'),
        ('F', '20.0'),
        ('G', '25.1') ]

data_df = pd.DataFrame(data, columns = ['name', 'value'])

value 列中的条目具有字符串数据类型。但是,它们的值可能是数字,也可能不是数字。

我想要得到什么:

  • 查找哪些行在 value 列中具有数值。

  • 从数据集中删除其他行。

最终结果如下:

name    value    
'B'      10         
'D'      10 
'F'      20.0  
'G'      25.1       

我尝试使用 isnumeric() 函数,但它仅针对整数(而不是 float )返回 True

如果您有任何解决此问题的想法,请告诉我。


更新的问题(多列):

(当有多于一列包含数值时,同样的问题)

同样,我有一个包含三列的 DataFrame。两列包含字符串值,这些值可能包含也可能不包含数字(整数或 float )。

示例:

import pandas as pd
import numpy as np

data = [('A', '>10', 'ABC'),
        ('B', '10', '15'),
        ('C', '<10', '>10'),
        ('D', '10', '15'),
        ('E', '10-20', '10-30'),
        ('F', '20.0', 'ABC'),
        ('G', '25.1', '30.1') ]

data_df = pd.DataFrame(data, columns = ['name', 'value1', 'value2'])

value1value2 中的条目具有字符串数据类型。但是,它们的值可能是数字,也可能不是数字。

我想要得到什么:

  • 查找哪些行在 value1value2 列中具有数值。

  • 从数据集中删除其他行。

最终结果如下:

name    value1    value2
'B'      10         15
'D'      10         15 
'G'      25.1       30.1

最佳答案

您可以使用pandas.to_numericerrors='coerce',然后 dropna删除无效行:

(data_df.assign(value=pd.to_numeric(data_df['value'], errors='coerce'))
        .dropna(subset=['value'])
)

注意。这会将整数向上转换为 float ,但这就是 Series 的工作方式,并且向上转换比强制对象类型更好

输出:

  name  value
1    B   10.0
3    D   10.0
5    F   20.0
6    G   25.1

如果您只想对行进行切片并保留字符串类型:

data_df[pd.to_numeric(data_df['value'], errors='coerce').notna()]

输出:

  name value
1    B    10
3    D    10
5    F  20.0
6    G  25.1
更新的问题(多列)

在切片之前构建一个掩模并使用any/all:

mask = data_df[data_df.columns[1:]].apply(pd.to_numeric, errors='coerce').notna().all(1)
data_df[mask]

关于python - 如何在 Pandas DataFrame 中查找包含数字的字符串数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70681047/

相关文章:

java - 大字符串导致的 OutOfMemoryException

python - 拆分带有附加空格的 Python 字符串(句子)

python - 如何加载 dylib 文件作为 CPython 扩展?

python - 代码在将 0.0 转换为 0 时有效,但在 1.0 转换时失败?

python - 总是在异常时调用 python 调试器的好通用方法

python - 根据时间序列中的先前值和后续值将值替换为 NaN

python - Pandas 分组 : how to calculate percentage of total?

python - 根据字符串列的最后一个字母,使用掩码删除 Pandas df 行

python - 保存 m2m 关系的 Django 问题

java - Java 中的循环和字符串