Я столкнулся со странным поведением select_dtypes в Pandas.
Я использую JupyterNotebook v6.0.1 с Python 3.7.4 на Ubuntu Linux.
I Я работаю с набором данных результатов бульдозерных аукционов .
Я начал с импорта набора данных в pandas фрейм данных из файла csv и отбросил пару функций, которые, как я знал, не хотел бы использовать, и ограничил набор данных по годам, потому что хотел использовать последние данные .
drop_features = ['SalesID','ModelID','MachineID','fiProductClassDesc']
bulldozers_df = pd.read_csv("bluebook-for-bulldozers/Train.csv").drop(drop_features,axis=1)
bulldozers_df = bulldozers_df[pd.to_datetime(bulldozers_df['saledate']).dt.year > 2004]
Затем я перечислил типы столбцов.
bulldozers_df.dtypes.value_counts()
object 44
int64 3
float64 2
dtype: int64
Затем я создал новый столбец Syntheti c с функцией, которую, как я думал, я хотел бы использовать .
bulldozers_df = bulldozers_df.assign(YearsMadeAgo = bulldozers_df['saledate'].astype('datetime64').dt.year - bulldozers_df['YearMade'].map(lambda x: bulldozers_df['YearMade'].mean() if pd.isna(x) else x))
А затем я снова проверил столбцы.
SalePrice int64
datasource int64
auctioneerID float64
YearMade int64
MachineHoursCurrentMeter float64
UsageBand object
saledate object
fiModelDesc object
fiBaseModel object
(... additional features...)
Travel_Controls object
Differential_Type object
Steering_Controls object
YearsMadeAgo int64
Затем я решил выбрать столбцы 'int64'. Я ожидал получить обратно 4 столбца: SalePrice, datasource, YearMade и YearsMadeA go (столбец, который я создал).
Однако, когда я запускаю команду, сначала я получаю только SalePrice, datasource и YearMade .
Затем, как только я попробую еще раз, pandas кажется сломанным и просто возвращает мне индекс.
bulldozers_df.select_dtypes('int64')
SalePrice datasource YearMade
0 66000 121 2004
3 38500 121 2001
4 11000 121 2007
5 26500 121 2004
7 27000 121 2001
... ... ... ...
401120 10500 149 2005
401121 11000 149 2005
401122 11500 149 2005
401123 9000 149 2005
401124 7750 149 2005
bulldozers_df.select_dtypes('int64')
0
3
4
5
7
...
401120
401121
401122
401123
401124
Кто-нибудь знает, что может происходить? df.select_dtypes, похоже, работал до того, как я добавил столбец YearsMadeA go.
Просто технические характеристики оборудования, если это актуально, у меня есть 24 ГБ ОЗУ с 20 ГБ свободного места и загрузка ЦП 1,2% с Intel ( R) Core (TM) i5-4460 CPU @ 3,20 ГГц.