python - 就地更改熊猫系列/数据框列的类型
问题描述
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')
推荐阅读
- python - 没有足够的值在 plt.pcolormesh 中解压
- python - 以有效的方式组合正则表达式 python
- php - 使用中间件后,重定向到 url 显示“此页面不工作”。但是当我删除中间件时,会显示页面
- python - 将整数转换为字符串过程(“幕后”)
- sql - 用随机数据填充表
- pine-script - 在 RSI 上绘制背离
- python - Tkinter 显示 Spyder 图标与默认 Tkinter 图标
- php - 带有 java 会话 cookie 的 CURL 在 Linux 上工作但在 Windows 上失败
- flutter - 使用riverpod导航到另一个屏幕时如何保留应用程序的状态
- python - 根据语言环境,日期格式不正确