簡體   English   中英

將pandas列從對象轉換為字符串或int / float類型是否必要還是有益?

[英]Is it necessary or beneficial to convert pandas column from object to string or int/float type?

我有一個帶有兩個變量的pandas df

id    name
011    Peter Parker
022    Warners Brother
101    Bruce Wayne

當前它們都是對象類型。

假設我想通過過濾某些條件來創建較小的數據框

df_small = df.loc[df['id']=='011']
df_small2 = df.loc[df['name']=='Peter Parker']

我已經想到並看到人們將對象類型列轉換為其他特定的數據類型。 我的問題是,如果我已經可以基於字符串比較(如上)對它們進行過濾,我是否需要這樣做? 將它們轉換為特定的字符串或int / float類型有什么好處?

您詢問了從stringobject dtypes轉換的好處。 我至少可以想到2個。 以以下數據框為例:

df = pd.DataFrame({'int_col':np.random.randint(0,10,10000), 'str_col':np.random.choice(list('1234567980'), 10000)})

>>> df.head()
   int_col str_col
0        7       0
1        0       1
2        1       8
3        6       1
4        6       0

此數據幀包括10000行,並具有一個int列和一個object (即string)列以進行顯示。

內存優勢:

整數列比對象列占用更少的內存:

>>> import sys
>>> sys.getsizeof(df['int_col'])
80104
>>> sys.getsizeof(df['str_col'])
660104

速度優勢:

由於您的示例與過濾有關,因此請看一下對整數而不是字符串進行過濾時的速度差異:

import timeit

def filter_int(df=df):
    return df.loc[df.int_col == 1]


def filter_str(df=df):
    return df.loc[df.str_col == '1']

>>> timeit.timeit(filter_int, number=100) / 100
0.0006298311000864488
>>> timeit.timeit(filter_str, number=100) / 100
0.0016585511100129225

在某些情況下,這種類型的速度差異可能會極大地加快代碼的速度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM