TL;DR: 我想就地更改Pandas数据帧列的数据类型。
我有一个Pandas数据帧:
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。 我知道如何做到这一点:
由于我的数据框非常大,所以在创建完数据框后,我希望将列的数据类型设置为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})
我的数据框的数据类型确实是:
df.dtypes
Out[180]:
a int32
b float32
dtype: object
然而:这种方式似乎很笨重,需要重新分配系列,特别是因为许多pandas方法都有一个inplace
参数。然而,使用这种方法似乎不起作用(从顶部开始使用相同的数据帧):
df['a'].astype(np.int32, inplace=True)
df.dtypes
Out[187]:
a int64
b float64
dtype: object
我有没有漏掉什么?这是故意的吗?在使用 DataFrame
对象时,如果使用 Series
也会出现相同的行为。
非常感谢。
df = df.astype({'a':np.int32, 'b':np.float32})
更加笨重 :) - ankyinplace
操作与重新赋值相比并无内存节省。 - cs95