簡體   English   中英

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

[英]Parse only specific characters from the string using python

嘗試從列中拆分和解析字符,並將解析后的數據提交到不同的列中。

我通過在給定的列數據中解析 _ 來嘗試相同的方法,直到字符串中存在的 '_' 的數量固定為 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

預期 Output:

  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'])

我想你想要這個:

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

output:

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

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

在此處使用str.extract

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

演示

根據您的問題, pandas DataFrame apply可能是一個很好的解決方案:

  • 首先,通過將NaN替換為空字符串''來清理 DataFrame
df = pd.DataFrame(data=['U_a65839_Jan87Apr88', 'U_b98652_Feb88Apr88_(2).jpg.pdf', 'V_C56478_mar89Apr89', 'Q_d15634_Apr90Apr91', 'Q_d15634_Apr90Apr91_(3).jpeg.pdf', 'S_e15336_may91Apr93', None], columns=['Col1'])

df = df.fillna('')
                               Col1
0               U_a65839_Jan87Apr88
1   U_b98652_Feb88Apr88_(2).jpg.pdf
2               V_C56478_mar89Apr89
3               Q_d15634_Apr90Apr91
4  Q_d15634_Apr90Apr91_(3).jpeg.pdf
5               S_e15336_may91Apr93
6
  • 接下來,定義一個 function 以使用regex提取所需的字符串
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 ''
  • 然后,輕松地將 function 應用到 DataFrame:
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

希望以上有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM