pandas select_dtypes не возвращает все столбцы dtype - PullRequest
0 голосов
/ 29 мая 2020

Я столкнулся со странным поведением 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 ГГц.

1 Ответ

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

Какую среду вы используете? Поскольку pandas будет визуально обрезать вывод, чтобы он поместился в определенной ячейке или выводе терминала.

Что-то вроде

bulldozers_df.info(verbose=True)

должно работать

также примерно так

with pd.option_context('display.max_rows', None, 'display.max_columns', None):
    print(df.dtypes)

Как показано здесь

Pandas печать ВСЕХ типов

...