[英]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)
它將僅更改通過字典傳遞的列的數據類型
@ElRudi
當我閱讀精美手冊時: copy=False
可能適合您的需要?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.