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

标签 python python-3.x pandas dataframe list-comprehension

我有这样的数据框:

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/

相关文章:

python-3.x - 在 Jupyter Notebook 中安装 feature_selector 时如何解决 egg_info 错误?

python - 验证数据框列数据

python - 将字节转换为 Int 时出错 (Python 2.7)

python - 了解异步IO : vs asynchronous programming

python - 如何使用 Django ORM 通过 DateTimeField() 计算 Postgresql 数据库中的项目

python - 我有所有棒球运动员的国家、开始和结束年份。我需要知道每个国家每年有多少球员参加比赛

python - 隐藏 xticks 标签每第 n 个标签或 Pandas 绘图上的值/使 x 轴可读

python - 数据类不从其父级继承 __eq__() 方法

python - Python 中的多重继承和构造函数

python - 使用正则表达式混合字符串