gpt4 book ai didi

python - 如何从数据框列值创建单独的子字符串列

转载 作者:行者123 更新时间:2023-11-28 19:46:46 25 4
gpt4 key购买 nike

我有这样的数据框:

Instru,Name
16834306,INFOSYS18SEP640.50PE
16834306,INFOSYS18SEP640.50PE
16834306,BHEL18SEP52.80CE
16834306,BHEL18SEP52.80CE
16834306,IOCL18SEP640PE
16834306,IOCL18SEP640PE

我想通过从名称列中获取字符串来创建单独的列,如下所示:

Instru,Name,Symbol,Month,SP,Type
16834306,INFOSYS18SEP640.50PE,INFOSYS,18SEP,640.50,PE
16834306,INFOSYS18SEP640.50PE,INFOSYS,18SEP,640.50,PE
16834306,BHEL18SEP52.80CE,BHEL,18SEP,52.80,CE
16834306,BHEL18SEP52.80CE,BHEL,18SEP,52.80,CE
16834306,IOCL18SEP640PE,IOCL,18SEP,640,PE
16834306,IOCL18SEP640PE,IOCL,18SEP,640,PE

注意:对于 SP 列,Decimal 显示为 decimal,int 显示为 int

最佳答案

使用 pandas.Series.str.extract 具有正则表达式模式的命名组

pat = '(?P<Symbol>.*?)(?P<Month>\d{1,2}\w{3})(?P<SP>[\d\.]+)(?P<Type>.*)'
df.join(df.Name.str.extract(pat))

Instru Name Symbol Month SP Type
0 16834306 INFOSYS18SEP640.50PE INFOSYS 18SEP 640.50 PE
1 16834306 INFOSYS18SEP640.50PE INFOSYS 18SEP 640.50 PE
2 16834306 BHEL18SEP52.80CE BHEL 18SEP 52.80 CE
3 16834306 BHEL18SEP52.80CE BHEL 18SEP 52.80 CE
4 16834306 IOCL18SEP640PE IOCL 18SEP 640 PE
5 16834306 IOCL18SEP640PE IOCL 18SEP 640 PE

正则表达式模式的解释

正则表达式是一种有趣的模糊业务,是一种艺术形式。我会解释我做了什么以及为什么。您可以比较我相对于 @jonclements 所做的事情并看到我们都使用相同的方法解决问题,但做出了微妙不同的假设。

  • '(?P<group_name>pattern)'是一种创建捕获组并将其命名为 'group_name' 的方法
  • '(?P<Symbol>.*?)'抓取所有字符直到下一个捕获组 '?'说不要贪心。
  • '(?P<Month>\d{1,2}\w{3})'抓取 1 或 2 个数字,然后是 3 个字母。 1 位或 2 位数字的模糊性是我将前一组设置为非贪婪的原因。
  • '(?P<SP>[\d\.]+)'抓取一位或多位数字或句点。不可否认,这并不是非常优雅,因为它可以抓取 '4.2.4.5'但它应该能完成工作。
  • '(?P<Type>.*)'播放清理并捕获其余部分。

关于python - 如何从数据框列值创建单独的子字符串列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52223981/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com