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

Python正则分割字符串构建指定结构Pandas DataFrame的方法

最简实现方案

不用写复杂正则,利用Pandas自带的字符串右拆分方法就能搞定,全程只需要4行核心代码,可适配所有带空格的国家名场景。

  • 核心思路:所有数据的最后5段都是无空格的数值内容,只有最前面的国家名可能包含空格,因此从字符串最右侧开始按空格拆分5次,就能自动把完整国家名和后续5个数值完全分离,不需要手动编写复杂正则匹配规则。

完整可运行代码如下:

import pandas as pd

# 原始嵌套列表数据
raw_data = [['Korea, Republic of 0.07 40 13 13 153'], ['United States 0.22 8 3 4 109'],['Argentina 0.19 10 14 17 33']]

# 1. 展平嵌套列表,提取每个子列表内的字符串转为Pandas序列
str_series = pd.Series([item[0] for item in raw_data])

# 2. 从右往左按空格拆分5次,直接展开为6列
df = str_series.str.rsplit(n=5, expand=True)

# 3. 设置列名,将后5列转为数值类型(Pandas自动识别int/float格式)
df.columns = ['country', 'value1', 'value2', 'value3', 'value4', 'value5']
df.iloc[:, 1:] = df.iloc[:, 1:].apply(pd.to_numeric)

结果验证

执行print(df)可得到符合要求的结构化数据:

country  value1  value2  value3  value4  value5
0  Korea, Republic of    0.07      40      13      13     153
1        United States    0.22       8       3       4     109
2            Argentina    0.19      10      14      17      33

执行print(df.dtypes)可验证列类型完全符合要求:

country     object
value1     float64
value2       int64
value3       int64
value4       int64
value5       int64
dtype: object
  • 备选正则方案(熟悉正则时可选用):
    如果偏好正则一次性提取内容,可以用str.extract方法,匹配规则简单,示例代码如下:
# 正则一次性匹配国家名+5个数值,直接拆分为6列
df = str_series.str.extract(r'^(.*?)\s+([\d.]+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)$')
# 后续设置列名、转数值类型的步骤和上述方案一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 17:47:37