熊猫select_dtypes不返回dtype的所有列

时间:2020-05-28 23:03:45

标签: python pandas data-science

我在Pandas中遇到select_dtypes的奇怪行为。

我在Ubuntu Linux上使用带有Python 3.7.4的JupyterNotebook v6.0.1。

我正在使用dataset of bulldozer auction results

我首先将数据集从csv文件导入到pandas数据框中,然后删除了一些我不希望使用的功能,并逐年限制了数据集,因为我想使用最新数据。

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

然后,我创建了一个新合成栏,它具有我想使用的功能。

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,数据源,YearMade和YearsMadeAgo(我创建的列)。

但是,当我运行命令时,首先我只返回SalePrice,数据源和YearMade。

然后,一旦我再试一次,熊猫似乎会折断,只是将索引返回给我。

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

有人知道会发生什么吗?在添加YearsMadeAgo列之前,df.select_dtypes似乎可以正常工作。

仅在硬件规格允许的情况下,我才拥有24 GB的RAM和20 GB的空闲空间以及1.2%的CPU使用率,而Intel(R)i5-4460 CPU @ 3.20GHz。

1 个答案:

答案 0 :(得分:0)

您正在使用什么环境?因为熊猫会在视觉上截断输出以适合特定的单元格或终端输出。

类似

bulldozers_df.info(verbose=True)

应该工作

也是这样

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

如此处所示

Pandas printing ALL dtypes