微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

例如,我有一个pandas列包含

text
A1V2
B2C7Z1

我想把它分成26个(A-Z)列,字母跟着值,如果缺少,则为-1.

所以,它可以

text    A  B  C  D ...  Z
A1V2    1  -1 -1 -1 ... -1
B2C7Z1 -1  2  7  -1 ... 1

有没有快速的方式,而不是使用df.apply()?

跟进:
感谢Psidom的精彩回答.当我使用该方法运行4百万行时,我花了1个小时.我希望有另一种方法可以让它更快.似乎str.extractall()是最耗时的.

解决方法:

尝试str.extractall与正则表达式(?P< key> [AZ])(?P< value> [0-9]),它将密钥([AZ])值([0-9])提取到单独的列和a长期到广泛的转变应该让你到那里.

这里,正则表达式(?P< key> [AZ])(?P< value> [0-9])匹配letterDigits模式,并且两个捕获组在结果中作为列键和值进入两个单独的列(具有?P< >语法);

由于extractall将多个匹配放入单独的行中,因此您需要将其转换为宽格式,并在键列上使用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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐