изменение типа данных в pandas dataframe меняет результат фильтрации - PullRequest
0 голосов
/ 25 мая 2020

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

import pandas as pd
mydict={'dep':[0,0,0,0],'nr':[1,1,2,2],'ft':[1,2,3,4],'car':['corsa','astra','clio','megane']}
carsdf = pd.DataFrame(mydict)
condition1 = carsdf['nr'] == 1
condition2 = carsdf['ft'] == 1
carsdf.loc[condition1 & condition2,['dep']]['dep'].tolist()

Результат [0]

теперь я делаю то же самое снова, но после изменения типа на str

carsdf = carsdf.astype('str')
condition1 = carsdf['nr'] == 1
condition2 = carsdf['ft'] == 1
carsdf.loc[condition1 & condition2,['dep']]['dep'].tolist()

Результат []

Я бы ожидал ['0']

Внутри нет элемента. Почему 0 go исчезает при изменении типа на str?

как я могу гарантировать, что никакие данные не потеряны?

ПРИМЕЧАНИЕ. Если вам интересно, почему я хочу «0», потому что полученные данные также могут быть в форме «2,3,4», которые я хочу преобразовать в список значений. В случае 0 мне нужно ['0']

вот скриншот

спасибо

enter image description here

1 Ответ

2 голосов
/ 25 мая 2020

Потому что вы ищете сравнение по целому числу (== 1). Если мы попробуем == '1', мы получим ожидаемый результат.

Sidenote, вы можете переписать свою последнюю строку более «pandas», см. Ниже

carsdf = carsdf.astype('str')
condition1 = carsdf['nr'] == '1'
condition2 = carsdf['ft'] == '1'
carsdf.loc[condition1 & condition2,'dep'].tolist()

Output

['0']
...