Python中向Pandas DataFrame追加数据时遇索引越界错误求助
问题分析与解决
你的代码触发IndexError的核心原因:第一个字符串'86:99'通过re.findall提取数字后,仅得到['86', '99']两个元素,但代码硬要访问索引2、3的元素,直接超出了列表长度。另外代码里还有个小语法错误:re.findall('[0-9]+', x).[0]多了个多余的点,正确写法是re.findall('[0-9]+', x)[0]。
推荐用更高效的方式处理:先统一将每个字符串提取的数字补全到固定长度(不足的用空值填充),再一次性生成DataFrame,避免循环append的低效操作:
import re import pandas as pd import numpy as np lst = ['86:99', '105:76 OT (87:87)'] # 定义单个字符串的数字提取+补全函数 def process_str(s): # 提取所有数字,\d+和[0-9]+功能一致,写法更简洁 nums = re.findall(r'\d+', s) # 补全到4个元素,不足的用NaN填充 nums += [np.nan] * (4 - len(nums)) return nums # 批量处理所有字符串 processed_data = [process_str(s) for s in lst] # 直接生成DataFrame df = pd.DataFrame(processed_data, columns=['f1', 'f2', 'f3', 'f4'])
运行后得到的结果:
| f1 | f2 | f3 | f4 | |
|---|---|---|---|---|
| 0 | 86 | 99 | NaN | NaN |
| 1 | 105 | 76 | 87 | 87 |
如果不需要用numpy的NaN,也可以用None填充;如果字符串中数字数量可能超过4个,可修改逻辑只取前4个,比如把补全行改成nums = nums[:4] + [np.nan]*(4 - len(nums[:4]))。
内容的提问来源于stack exchange,提问作者ahmedaao
相关产品推荐
相关产品推荐

