Как подобрать строки для равенства с типом float с помощью панд - PullRequest
0 голосов
/ 07 июня 2018

У меня есть следующий пример набора данных.

df_csv_y =  pd.read_csv('y_factors.csv')

                 time    value
0       736527.481944  27.20001
1       736527.482639  27.10001
2       736527.483333  27.10001
3       736527.484028  27.10001
4       736527.484722  27.10001
              ......

И я попробовал индексировать, используя приведенный ниже код.

df_csv_y[df_csv_y.time== 736527.482639]

Я проиндексировал значения, которые существовали в наборе данных, норезультаты были следующими.

Empty DataFrame
Columns: [time, value]
Index: []

Я получаю результат, когда получаю целое число, но не могу получить данные с плавающей запятой, как столбец времени в наборе данных выше.

Я хочузнать, как решить эту проблему.

1 Ответ

0 голосов
/ 07 июня 2018

Проблема здесь в том, что ваши реальные значения с плавающей точкой имеют более высокую точность, чем отображаемые значения, вы можете использовать np.isclose и установить допуск на более высокую точность, чем значение по умолчанию, чтобы выбрать значения, которые достаточно близки:

In[165]:
df[np.isclose(df['time'],736527.482639, 0.0000000001)]

Out[165]: 
            time     value
1  736527.482639  27.10001

Ваши текущие опубликованные образцы данных работают, но ваши реальные данные имеют более высокую точность.Вы можете настроить параметр atol на np.isclose, чтобы установить абсолютный допуск.

Другой аспект этого заключается в том, что сравнение значений с плавающей точкой на равенство, как правило, просто не будет работать из-за с плавающей точкойточность , поэтому при работе со значениями с плавающей точкой лучше использовать что-то вроде np.isclose для сравнения

...