繁体   English   中英

"您可以一步使用 .str.split() 在 Panda 数据框列中捕获多个子字符串吗"

[英]can you capture multiple substrings in a Panda dataframe column using .str.split() in one step

我有一个数据库,它在 Pandas 数据框中有一列,其中包含一个字符串,该字符串具有我提取的两个子字符串(一个字符串和一个数字)。 我用 str.split() 来做,但不是以非常 Pythonic 的方式,因为 split,至少对我来说,将拆分的第一项返回到数据库。 我当然可以将结果分配给单独的数据框,完成拆分并将其恢复。

我确信有更好的方法可以做到这一点,但到目前为止我还没有找到它。

这是一个说明性的数据框:

df = pd.DataFrame ({'d': {71: '2022-01-03', 72: '2022-01-04', 73: '2022-01-06', 74: '2022-01-07', 75: '2022-01-07'},
                    'e': {71: 'MDU(US5526901096) Cash Dividend USD 0.2175 per Share (Ordinary Dividend)',
                          72: 'KMB(US4943681035) Cash Dividend USD 1.14 per Share (Ordinary Dividend)',
                          73: 'IRM(US46284V1017) Cash Dividend USD 0.6185 per Share (Ordinary Dividend)',
                          74: 'MRK(US58933Y1055) Cash Dividend USD 0.69 per Share (Ordinary Dividend)',
                          75: 'PEP(US7134481081) Cash Dividend USD 1.075 per Share (Ordinary Dividend)'}, 
                    'f': {71: '108.75', 72: '1368', 73: '556.65', 74: '345', 75: '537.5'}})
df

这没有以任何方式进行优化,它做了一些假设,但我试图在下面强调它们。

import pandas as pd
import re

def parse_row(row) :
  match = re.search('^([a-zA-Z]+).*USD (\d+\.?\d*) per', row, re.I)
  return pd.Series([match.group(1), match.group(2)])

df[['symbol', 'qrtrly_div_total']] = df['e'].apply( parse_row )

>>> df
             d                                                  e       f symbol qrtrly_div_total
71  2022-01-03  MDU(US5526901096) Cash Dividend USD 0.2175 per...  108.75    MDU           0.2175
72  2022-01-04  KMB(US4943681035) Cash Dividend USD 1.14 per S...    1368    KMB             1.14
73  2022-01-06  IRM(US46284V1017) Cash Dividend USD 0.6185 per...  556.65    IRM           0.6185
74  2022-01-07  MRK(US58933Y1055) Cash Dividend USD 0.69 per S...     345    MRK             0.69
75  2022-01-07  PEP(US7134481081) Cash Dividend USD 1.075 per ...   537.5    PEP            1.075

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM