Python 如何在DataFrame对象数据类型中正确识别包含点的浮点值[0,1]?
我有一个这样的数据框,其中我的值是object dtype:Python 如何在DataFrame对象数据类型中正确识别包含点的浮点值[0,1]?,python,string,pandas,floating-point,contains,Python,String,Pandas,Floating Point,Contains,我有一个这样的数据框,其中我的值是object dtype: 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() <c
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
我也尝试了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)的场景
我有两个问题:
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
如果您真的想只提取浮点数,请尝试使用更健壮的正则表达式
df[df['Value'].str.contains(r'\d+\.\d+')].astype(float)
Value
2 0.174418
4 1.000000
对不起,我对着枕头大喊大叫(但谢谢你)。
df[df['Value'].str.contains(r'\d+\.\d+')].astype(float)
Value
2 0.174418
4 1.000000