使用python仅解析字符串中的特定字符

使用python仅解析字符串中的特定字符,python,pandas,Python,Pandas,尝试拆分和解析列中的字符,并将解析后的数据提交到不同的列中 我试图通过在给定的列数据中使用u进行解析来实现同样的效果,在字符串中存在的u的数量被固定为2之前,它一直工作良好 输入数据: Col1 U_a65839_Jan87Apr88 U_b98652_Feb88Apr88_(2).jpg.pdf V_C56478_mar89Apr89 Q_d15634_Apr90Apr91 Q_d15634_Apr90Apr91_(3).jpeg.pdf S_e15336_may91Apr93

尝试拆分和解析列中的字符,并将解析后的数据提交到不同的列中

我试图通过在给定的列数据中使用u进行解析来实现同样的效果,在字符串中存在的u的数量被固定为2之前,它一直工作良好

输入数据:

        Col1
U_a65839_Jan87Apr88
U_b98652_Feb88Apr88_(2).jpg.pdf
V_C56478_mar89Apr89
Q_d15634_Apr90Apr91
Q_d15634_Apr90Apr91_(3).jpeg.pdf
S_e15336_may91Apr93
NaN
预期产出:

  col2
Jan87Apr88
Feb88Apr88
mar89Apr89
Apr90Apr91
Apr90Apr91
may91Apr93
我一直在尝试的代码:

df = pd.read_excel(open(r'Dats.xlsx', 'rb'), sheet_name='Sheet1')

df['Col2'] = df.Col1.str.replace(
    '.*_', '', regex=True
)
print(df['Col2'])

在此处使用
str.extract

df[“col2”]=df[“Col1”].str.extract(r'(((?:[a-z]{3}\d{2}){2}),flags=re.IGNORECASE)

在此处使用
str.extract

df[“col2”]=df[“Col1”].str.extract(r'(((?:[a-z]{3}\d{2}){2}),flags=re.IGNORECASE)
我想你想要这个:

col2 = df.Col1.str.split("_", expand=True)[2]
输出:

0    Jan87Apr88
1    Feb88Apr88
2    mar89Apr89
3    Apr90Apr91
4    Apr90Apr91
5    may91Apr93
6           NaN
(如果你不想要最后一行,你可以
dropna

我想你想要这个:

col2 = df.Col1.str.split("_", expand=True)[2]
输出:

0    Jan87Apr88
1    Feb88Apr88
2    mar89Apr89
3    Apr90Apr91
4    Apr90Apr91
5    may91Apr93
6           NaN

(如果您不想要最后一行,您可以
dropna

基于您的问题,
pandas
DataFrame
apply
可以是一个很好的解决方案:

  • 首先,通过将
    NaN
    s替换为空字符串
    '
  • 接下来,使用
    regex
  • 然后,轻松地将该函数应用于DataFrame:

希望以上内容有所帮助。

基于您的问题,
pandas
DataFrame
apply
可能是一个很好的解决方案:

  • 首先,通过将
    NaN
    s替换为空字符串
    '
  • 接下来,使用
    regex
  • 然后,轻松地将该函数应用于DataFrame:

希望上面的帮助。

我希望在继续之前删除所有空值,在执行上面的行之前,df.Col1=df.Col1.dropna(inplace=True),但它会给出错误。请建议如何处理它。不清楚但看不到错误消息,但可能会删除
inplace=True
。就地修改通常返回
None
,只对对象进行操作。我希望在继续之前删除所有空值,在执行上述行之前,df.Col1=df.Col1.dropna(inplace=True),但它给出了错误。请建议如何处理它。不清楚但看不到错误消息,但可能会删除
inplace=True
。就地修改通常返回
None
,只对对象进行操作
def fun(s):
    import re
    m = re.search(r'\w{3}\d{2}\w{3}\d{2}', s)
    if m:
        return m.group(0)
    else:
        return ''
df['Col2'] = df['Col1'].apply(fun)
                               Col1        Col2
0               U_a65839_Jan87Apr88  Jan87Apr88
1   U_b98652_Feb88Apr88_(2).jpg.pdf  Feb88Apr88
2               V_C56478_mar89Apr89  mar89Apr89
3               Q_d15634_Apr90Apr91  Apr90Apr91
4  Q_d15634_Apr90Apr91_(3).jpeg.pdf  Apr90Apr91
5               S_e15336_may91Apr93  may91Apr93
6