多列字符串提取数字失败:Pandas代码问题及预期输出求助
解决DataFrame多列字符串提取数字的问题
原代码的问题
你之前的代码df['Diatom col', 'Cistos col']是错误的列选择方式,pandas中选择多列必须使用双层方括号,单层方括号加元组的方式无法正确选中目标列,这直接导致后续str.extract执行无效。
正确解决方案
1. 提取每列中的第一个数字序列
如果你的字符串中只有一组数字,或者只需要提取第一个连续数字序列,使用以下代码:
# 正确选择多列,对每列应用数字提取 df1 = df[['Diatom col', 'Cistos col']].str.extract('(\d+)') # 可选:将提取的字符串转为整数类型(根据需求也可转float) df1 = df1.astype(int)
2. 处理包含多组数字的场景(可选)
如果某列字符串里有多个独立数字序列,需要提取所有数字的话,可以用str.extractall再整理结果:
# 提取所有数字,返回带多层索引的结果 extracted = df[['Diatom col', 'Cistos col']].str.extractall('(\d+)') # 重置索引并合并同一行的多个数字 df1 = extracted.unstack().droplevel(0, axis=1) # 重命名列(方便区分同一列的多个数字) df1.columns = [f'{col}_num{i+1}' for col in df1.columns.levels[0] for i in range(df1.columns.levels[1].size)]
示例效果
假设输入DataFrame为:
| Diatom col | Cistos col |
|---|---|
| abc123def | xyz456 |
| 789test | 012abc345 |
执行第一种方案后,输出df1为:
| Diatom col | Cistos col |
|---|---|
| 123 | 456 |
| 789 | 012 |
内容的提问来源于stack exchange,提问作者Susana Martins
相关产品推荐
相关产品推荐

