gpt4 book ai didi

python - 如何在 DataFrame 对象 dtype 中正确识别包含点的浮点值 [0, 1]?

转载 作者:行者123 更新时间:2023-11-30 21:56:06 25 4
gpt4 key购买 nike

我有一个像这样的数据框,其中我的值是对象数据类型:

df = pd.DataFrame(data=['A', '290', '0.1744175757', '1', '1.0000000000'], columns=['Value'])

df
Out[65]:
Value
0 A
1 290
2 0.1744175757
3 1
4 1.0000000000

df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5 entries, 0 to 4
Data columns (total 1 columns):
Value 5 non-null object
dtypes: object(1)
memory usage: 120.0+ bytes

我想要做的是仅选择百分比,在本例中为 0.1744175757 和 1.0000000000,这在我的数据中发生的情况都会有一个句点/点。这是一个关键点 - 我需要能够区分 1 整数值和 1.0000000000 百分比,以及 0 和 0.0000000000。

我试图寻找点字符的存在,但这不起作用,它对每个值都返回 true,我不清楚为什么。

df[df['Value'].str.contains('.')]
Out[67]:
Value
0 A
1 290
2 0.1744175757
3 1
4 1.0000000000

我也尝试过 isdecimal(),但这并不是我想要的:

df[df['Value'].str.isdecimal()]
Out[68]:
Value
1 290
3 1

我想出的最接近的函数:

def isPercent(x):

if pd.isnull(x):
return False

try:
x = float(x)
return x % 1 != 0
except:
return False

df[df['Value'].apply(isPercent)]
Out[74]:
Value
2 0.1744175757

但这无法正确识别 1.0000000000(和 0.0000000000)的场景。

我有两个问题:

  1. 为什么 str.contains('.') 在这种情况下不起作用?这似乎是最简单的方法,因为它 100% 的时间都会为我提供数据中所需的内容,但即使没有“.”,它也会返回 True。性格显然体现在值(value)观中。
  2. 如何正确识别值中包含点字符的所有值 [0, 1]?

最佳答案

str.contains 默认执行基于正则表达式的搜索,并且“.”将匹配正则表达式引擎的任何字符。要禁用它,请使用regex=False:

df[df['Value'].str.contains('.', regex=False)]

Value
2 0.1744175757
4 1.0000000000

您也可以转义它以按字面意思对待它:

df[df['Value'].str.contains(r'\.')]

Value
2 0.1744175757
4 1.0000000000
<小时/>

如果您确实只想获取 float ,请尝试使用更强大的正则表达式。

df[df['Value'].str.contains(r'\d+\.\d+')].astype(float)

Value
2 0.174418
4 1.000000

关于python - 如何在 DataFrame 对象 dtype 中正确识别包含点的浮点值 [0, 1]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55582520/

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