You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas重命名列后bigint转double:如何批量转换回int类型?

Pandas列重命名与类型转换问题

输入数据

Name,Empid,2020_salary,2021_salary,2022_salary
Adam,21223,58000,60000,62000
John,21534,67465,70985,90857
Terry,35463,76000,86765,97886

需求与问题

需要将带_salary后缀的年份列名(如2020_salary)改为仅保留年份(如2020),且未来会新增年份列,无法手动逐个处理。使用df.rename(columns= lambda x: x.replace('_salary',''),inplace=True)重命名后,部分年份列的数据类型从bigint变为double(显示为58000.0),需要自动将这些列转回int类型。

解决方案

方案1:重命名后自动筛选年份列转换类型

重命名完成后,通过列名特征筛选出年份列(列名纯数字),统一转换为整数类型:

# 执行列重命名(保留原代码)
df.rename(columns=lambda x: x.replace('_salary', ''), inplace=True)

# 筛选列名为纯数字的年份列
year_columns = [col for col in df.columns if col.isdigit()]

# 无缺失值时直接转为int类型
df[year_columns] = df[year_columns].astype(int)

# 若存在缺失值,使用可空整数类型避免报错
# df[year_columns] = df[year_columns].astype('Int64')

方案2:读取数据时提前指定类型,从根源避免转换问题

在读取CSV文件阶段就指定年份列的类型,防止Pandas自动将其推断为浮点类型:

import pandas as pd

# 先读取文件列名,用于构建类型映射
column_names = pd.read_csv('your_data.csv', nrows=0).columns

# 构建类型字典:Name为字符串,Empid为整数,带_salary的列均为整数
dtype_mapping = {}
for col in column_names:
    if col == 'Name':
        dtype_mapping[col] = 'object'
    elif '_salary' in col:
        dtype_mapping[col] = int
    else:
        dtype_mapping[col] = int

# 读取数据并指定类型
df = pd.read_csv('your_data.csv', dtype=dtype_mapping)

# 执行列重命名
df.rename(columns=lambda x: x.replace('_salary', ''), inplace=True)

补充说明

列类型变为double通常是因为读取数据时,Pandas自动推断类型时检测到列中存在缺失值(或隐形缺失),因此将整数类型转为浮点类型。上述两种方案分别从事后修正和事前预防两个角度解决问题,可根据实际数据情况选择。

内容的提问来源于stack exchange,提问作者Aryan Tyagi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 07:31:06