pandas select\u数据类型不返回数据类型的所有列

2024-07-02 13:19:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我在熊猫身上遇到了一些奇怪的行为

我正在Ubuntu Linux上使用JupyterNotebook v6.0.1和Python 3.7.4

我和一个dataset of bulldozer auction results一起工作

我从csv文件将数据集导入pandas dataframe开始,删除了一些我知道不想使用的功能,并逐年限制数据集,因为我想使用最新的数据

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、datasource、YearMake和YearsMadeAgo(我制作的专栏)

然而,当我运行该命令时,首先我只返回SalePrice、datasource和yearmake

然后,我再试一次,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

有人知道会发生什么吗?在我添加YearsMadeAgo列之前,df.select\u数据类型似乎可以工作

只要硬件规格是相关的,我有24 GB的RAM,20 GB的空闲空间,1.2%的CPU使用率,Intel(R)Core(TM)i5-4460 CPU@3.20GHz


Tags: csv数据dfobjectdroppdfeaturesdatasource
1条回答
网友
1楼 · 发布于 2024-07-02 13:19:41

您使用的是什么环境?因为pandas会在视觉上截断输出以适应特定的单元格或终端输出

差不多

bulldozers_df.info(verbose=True)

应该有用

也是这样的

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

如图所示

Pandas printing ALL dtypes

相关问题 更多 >