pandas .loc возвращает пустой фрейм данных - PullRequest
0 голосов
/ 29 мая 2018

У меня есть pandas dataframe, который выглядит ниже.

chainage(km)  
0  
0.001  
0.002  
0.003  
0.004

, пока я использую .loc для поиска chainage(km), он возвращает пустой фрейм данных для некоторых цепочек.

print data.loc[data['chainage(km)'] == float(0.004)]  

- Пустой фрейм данных

print data.loc[data['chainage(km)'] == float(0.001)]  

- возвращает значение

Любая помощь будет высоко ценится.

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

Две возможные причины:

Возможно, что столбец chainage(km) является типом объекта, и для пятой строки он хранит 0.004 в виде строки, то есть '0.004'.Чтобы исправить это, приведите его как float

data = data.astype(float)

Если после выполнения приведенного выше преобразования, фильтрация все еще не работает для 0.004

Тогда, учитывая, что data['chainage(km)'] == float(0.004) не работаетвернуть любой True, в то время как data.loc[data['chainage(km)'] == float(0.001)] возвращает корректно, это говорит о том, что вы испытываете ошибки с плавающей запятой.

Попробуйте выполнить следующее:

x = float(0.004)
data[abs(data['chainage(km)'] - float(x)) < 0.0001*x]

Этот фильтр для строки заменяет условие равенства ошибкой произвольного размера.

0 голосов
/ 29 мая 2018

Проблема возникает из-за неточностей с плавающей запятой.Это объясняется в Не работает ли математика с плавающей запятой? .

В подобных ситуациях используйте вместо этого np.isclose.

df[np.isclose(data['chainage(km)'], 0.004)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...