У меня есть такой фрейм данных, где мои значения имеют тип объекта 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], для которых в значении указан символ точки?