簡體   English   中英

就地更改熊貓系列/數據框列的類型

[英]Change type of pandas series/dataframe column inplace

TL;DR :我想就地更改熊貓數據框列的數據類型。


我有一個熊貓數據框:

df = pd.DataFrame({'a': [1,2,3], 'b': [4,5,6.1]})

默認情況下,它的列在我的系統上分配了“int64”和“float64”:

df.dtypes
Out[172]: 
a      int64
b    float64
dtype: object

因為我的數據框會非常大,所以我想在創建數據框后將列數據類型設置為 int32 和 float32。 我知道我該怎么做:

df['a'] = df['a'].astype(np.int32)
df['b'] = df['b'].astype(np.float32)

或者,一步:

df = df.astype({'a':np.int32, 'b':np.float32})

我的數據框的 dtypes 確實是:

df.dtypes
Out[180]: 
a      int32
b    float32
dtype: object

但是:這似乎很笨重,必須重新分配系列,尤其是。 因為許多 pandas 方法都有一個inplace kwarg。 但是,使用它似乎不起作用(從頂部的相同數據框開始):

df['a'].astype(np.int32, inplace=True)

df.dtypes
Out[187]: 
a      int64
b    float64
dtype: object

有什么我在這里忽略的嗎? 這是設計使然嗎? 使用Series而不是DataFrame對象時會顯示相同的行為。

非常感謝,

您可以編寫自己的(仍然笨重的)就地版本:

def astype_inplace(df: pd.DataFrame, dct: Dict):
    df[list(dct.keys())] = df.astype(dct)[list(dct.keys())]

def astype_per_column(df: pd.DataFrame, column: str, dtype):
    df[column] = df[column].astype(dtype)

並像使用它一樣

astype_inplace(df, {'bool_col':'boolean'})

或者

astype_per_column(df, 'bool_col', 'boolean')

還有呢

>>> df.__dict__.update(df.astype({'a': np.int32, 'b': np.float32}).__dict__)
>>> df.dtypes
a      int32
b    float32
dtype: object

?

將列名及其數據類型作為字典作為 .astype() 中的參數傳遞

col_types = {'col_1':'type_1', 'col_4':'type_4'}
df = df.astype( col_types)

它將僅更改通過字典傳遞的列的數據類型

暫無
暫無

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

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