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

如何将DataFrame的ID列中仅整数值替换为连续数字序列?

替换DataFrame中ID列的整数值为连续数字序列(跳过非整数/非有效值)

解决方案思路

  1. 识别ID列中仅为纯整数值的单元格(包括以字符串形式存储的整数,如"1")
  2. 为这些符合条件的单元格分配从1开始的连续序号
  3. 非整数、带空格的字符串、NaN等单元格保持原样

代码实现

首先构造你的原始DataFrame(如果已有则跳过这一步):

import pandas as pd

# 构造原始数据
data = {
    "ID": ["1", "test", "test test", "test", "1", "xx", "x xx", "1", "1", "xxxxx", "1", "xxx", "xx xx", "1"],
    "AMOUNT": [0.00, 5.00, 0.00, 0.00, 0.00, 304.95, 304.95, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00]
}
df = pd.DataFrame(data)

然后执行替换逻辑:

# 定义函数判断单元格是否为纯整数值
def is_pure_integer(cell):
    try:
        # 确保单元格内容是纯数字字符串(排除带小数点、空格的情况)
        return str(cell).strip().isdigit()
    except (ValueError, TypeError):
        return False

# 生成掩码:标记哪些ID是纯整数
integer_mask = df["ID"].apply(is_pure_integer)

# 为符合条件的ID分配连续序号(从1开始)
df.loc[integer_mask, "ID"] = range(1, integer_mask.sum() + 1)

结果验证

执行后得到的DataFrame与你的期望一致:

ID   AMOUNT
0         1    0.00
1      test    5.00
2  test test    0.00
3      test    0.00
4         2    0.00
5        xx  304.95
6      x xx  304.95
7         3    0.00
8         4    0.00
9     xxxxx    0.00
10        5    0.00
11       xxx    0.00
12    xx xx    0.00
13        6    0.00

为什么np.arange(len(df))不符合预期?

np.arange(len(df))会给每一行都分配连续序号,不管ID是否为整数,这会覆盖所有非整数的ID值,完全不符合你仅替换整数值的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 19:35:35