如何将DataFrame的ID列中仅整数值替换为连续数字序列?
替换DataFrame中ID列的整数值为连续数字序列(跳过非整数/非有效值)
解决方案思路
- 识别ID列中仅为纯整数值的单元格(包括以字符串形式存储的整数,如"1")
- 为这些符合条件的单元格分配从1开始的连续序号
- 非整数、带空格的字符串、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
相关产品推荐
相关产品推荐

