将一个pandas列文本拆分为多个列

2024-09-30 01:27:28 发布

您现在位置:Python中文网/ 问答频道 /正文

例如,我有一个pandas列包含

text
A1V2
B2C7Z1

我想把它分成26个(A-Z)列,后面是字母表的值,如果缺少,那么是-1。在

所以,可以

^{pr2}$

有没有比使用更快捷的方法数据框应用()? 在

随访: 感谢Psidom的精彩回答。当我使用这个方法运行400万行时,我花了1个小时。我希望有另一种方法可以让它更快。看来str.extractall公司()是最耗时的。在


Tags: 数据方法textpandas公司字母表小时精彩
1条回答
网友
1楼 · 发布于 2024-09-30 01:27:28

尝试使用regex str.extractall,它将键([A-Z])值([0-9]+)提取到单独的列中,一个长到宽的转换应该可以让您达到目的。在

这里regex(?P<key>[A-Z])(?P<value>[0-9]+)匹配字母数字模式,两个捕获组在结果中以列keyvalue的两个独立列(使用?P<>语法)

而且由于extractall将多个匹配项放入单独的行中,因此需要在key列上使用unstack将其转换为宽格式:

(df.text.str.extractall("(?P<key>[A-Z])(?P<value>[0-9]+)")
 .reset_index('match', drop=True)
 .set_index('key', append=True)
 .value.unstack('key').fillna(-1))

#key    A   B   C   V   Z
#  0    1  -1  -1   2  -1
#  1   -1   2   7  -1   1

相关问题 更多 >

    热门问题