gpt4 book ai didi

python - 如何使用 Pandas 查找特定列具有十进制数字的行?

转载 作者:太空宇宙 更新时间:2023-11-04 01:53:27 25 4
gpt4 key购买 nike

我正在使用 pandas 编写数据质量脚本,该脚本将检查每一列的某些条件

目前我需要找出特定列中没有小数或实际数字的行。如果它是整数,我能够找到数字,但是到目前为止我看到的方法即 isdigit() 、isnumeric()、isdecimal() 等无法正确识别数字何时是十进制数。例如:2.5、0.1245 等

以下是一些示例代码和数据:

>>> df = pd.DataFrame([
[np.nan, 'foo', 0],
[1, '', 1],
[-1.387326, np.nan, 2],
[0.814772, ' baz', ' '],
["a", ' ', 4],
[" ", 'foo qux ', ' '],
], columns='A B C'.split(),dtype=str)

>>> df
A B C
0 NaN foo 0
1 1 1
2 -1.387326 NaN 2
3 0.814772 baz
4 a 4
5 foo qux

>>> df['A']
0 NaN
1 1
2 -1.387326
3 0.814772
4 a
5
Name: A, dtype: object

以下方法均无法识别十进制数

df['A'].fillna('').str.isdigit()
df['A'].fillna('').str.isnumeric()
df['A'].fillna('').str.isdecimal()

0 False
1 True
2 False
3 False
4 False
5 False
Name: A, dtype: bool

所以当我尝试以下操作时,我只得到 1 行

>>> df[df['A'].fillna('').str.isdecimal()]
A B C
1 1 1

注意:我正在使用 dtype=str 来获取数据,而无需 pandas 解释/更改数据类型的值。实际数据可能在 A 列中有空格,我将使用 replace() 将其删除,我在这里保持代码简单,以免混淆。

最佳答案

使用to_numeric使用 errors='coerce' 将非数字转换为 NaN,然后通过 Series.notna 进行测试:

print (pd.to_numeric(df['A'], errors='coerce').notna())
0 False
1 True
2 True
3 True
4 False
5 False
Name: A, dtype: bool

如果需要为缺失值返回 True:

print (pd.to_numeric(df['A'], errors='coerce').notna() | df['A'].isna())
0 True
1 True
2 True
3 True
4 False
5 False
Name: A, dtype: bool

另一种具有自定义功能的解决方案:

def test_numeric(x):
try:
float(x)
return True
except Exception:
return False

print (df['A'].apply(test_numeric))
0 True
1 True
2 True
3 True
4 False
5 False
Name: A, dtype: bool

print (df['A'].fillna('').apply(test_numeric))
0 False
1 True
2 True
3 True
4 False
5 False
Name: A, dtype: bool

关于python - 如何使用 Pandas 查找特定列具有十进制数字的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57477925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com