Python字符串转换求助:将长字符串拆分为多行垂直条目
解决方法
针对这个问题,核心是用正则表达式来拆分字符串——因为你要提取的片段都是以大写字母开头的,普通的split没法识别这种位置分隔。下面是具体步骤和代码:
假设你的DataFrame叫df,目标列名为target_col(替换成你实际的列名即可):
- 提取引号内的纯字符串
如果原列格式是A='XXX'这类,先把引号里的内容单独提取出来:
df['raw_str'] = df['target_col'].str.extract(r"'(.*)'", expand=False)
- 按大写字母位置拆分字符串
用正则的正向预查,在每个大写字母前拆分,这样就能得到A123、B4567这类单独片段:
# 拆分后生成多列,用stack把列转成行 split_items = df['raw_str'].str.split(r'(?=[A-Z])', expand=True).stack()
- 整理成单列格式
把拆分后的结果转成你需要的每行一条目的格式,还能保留原索引关联(不需要的话可以去掉):
result_df = split_items.reset_index(level=1, drop=True).to_frame('new_col')
举个实际例子,原数据如果是:
| target_col |
|---|
| A='A123B4567C9876D145789' |
执行完代码后,result_df会变成:
| new_col |
|---|
| A123 |
| B4567 |
| C9876 |
| D145789 |
补充说明
pd.transpose()是用来转置行列的,和拆分字符串无关,自然解决不了问题;- 普通
pd.str.split()没用是因为你没指定正确的拆分规则——这里需要匹配大写字母前的位置,而非固定分隔符。
内容的提问来源于stack exchange,提问作者Awais Farooqui
相关产品推荐
相关产品推荐

