我在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。
答案 0 :(得分:0)
您正在使用什么环境?因为熊猫会在视觉上截断输出以适合特定的单元格或终端输出。
类似
bulldozers_df.info(verbose=True)
应该工作
也是这样
with pd.option_context('display.max_rows', None, 'display.max_columns', None):
print(df.dtypes)
如此处所示