【发布时间】:2019-08-30 03:21:00
【问题描述】:
我有一个像这样的数据框,其中我的值是对象 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()
<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)的场景。
我有两个问题:
- 为什么 str.contains('.') 在这种情况下不起作用?这似乎是最简单的方法,因为它会 100% 的时间让我得到我需要的数据,但即使没有“。”它也会返回 True。字符显然在值中。
- 如何正确识别值中包含点字符的所有值 [0, 1]?
【问题讨论】:
标签: python string pandas floating-point contains