簡體   English   中英

從列值中拆分並獲取字符串的一部分,並從pandas python中創建新列

[英]Split and take part of string from column values and make new column from that in pandas python

我有一個這樣的字符串作為我的df中一列的值。

ttt-OPP/MKKL-7/LNFFF-74/OOOP-71/AAD-1/RRR-232
ttt-OPP/MKKL-7/LNFFF-89/OOOP-71/AAD-1/RRR-232

如何使用此列的一部分獲取新列。 我需要的部分是

74
89

string.split()允許您根據分隔符(此處為/- )將字符串分解為部件列表。

s = 'ttt-OPP/MKKL-7/LNFFF-74/OOOP-71/AAD-1/RRR-232'
print s.split('/')[2].split('-')[1]
# 74

使用pandas.apply()將其應用於您的列

df['b'] = df['a'].apply(lambda s:s.split('/')[2].split('-')[1])
print (df)

產量

                                              a   b
0  ttt-OPP/MKKL-7/LNFFF-74/OOOP-71/AAD-1/RRR-232  74
1  ttt-OPP/MKKL-7/LNFFF-89/OOOP-71/AAD-1/RRR-232  89

nb:使用@ A-Za-z的解決方案,它比我的快。

如果這是df

    val
0   ttt-OPP/MKKL-7/LNFFF-74/OOOP-71/AAD-1/RRR-232
1   ttt-OPP/MKKL-7/LNFFF-89/OOOP-71/AAD-1/RRR-232

您可以使用str.extract

df['num_val'] = df.val.str.extract('LNFFF-(\d+)/', expand = False)

你得到

    val                                             num_val
0   ttt-OPP/MKKL-7/LNFFF-74/OOOP-71/AAD-1/RRR-232   74
1   ttt-OPP/MKKL-7/LNFFF-89/OOOP-71/AAD-1/RRR-232   89

假設您的數據框名為df且列col:

 df['sub_col'] = pd.Series([s[21:23] for s in df['col'].values], index=df.index)

看來你需要str.extract

df = pd.DataFrame({'a': ['ttt-OPP/MKKL-7/LNFFF-74/OOOP-71/AAD-1/RRR-232',
                         'ttt-OPP/MKKL-7/LNFFF-89/OOOP-71/AAD-1/RRR-232']})  
print (df)
                                               a
0  ttt-OPP/MKKL-7/LNFFF-74/OOOP-71/AAD-1/RRR-232
1  ttt-OPP/MKKL-7/LNFFF-89/OOOP-71/AAD-1/RRR-232

df['new'] = df['a'].str.extract('LNFFF-(\d+)', expand=False)
#if necessary convert to ints
df['new'] = df['new'].astype(int)
print (df)
                                               a new
0  ttt-OPP/MKKL-7/LNFFF-74/OOOP-71/AAD-1/RRR-232  74
1  ttt-OPP/MKKL-7/LNFFF-89/OOOP-71/AAD-1/RRR-232  89

通過split並通過索引使用str進行選擇的解決方案:

df['new'] = df['a'].str.split('/').str[2].str.extract('(\d+)', expand=False)
print (df)
                                               a new
0  ttt-OPP/MKKL-7/LNFFF-74/OOOP-71/AAD-1/RRR-232  74
1  ttt-OPP/MKKL-7/LNFFF-89/OOOP-71/AAD-1/RRR-232  89

df['new'] = df['a'].str.split('/').str[2].str.split('-').str[1]
print (df)
                                               a new
0  ttt-OPP/MKKL-7/LNFFF-74/OOOP-71/AAD-1/RRR-232  74
1  ttt-OPP/MKKL-7/LNFFF-89/OOOP-71/AAD-1/RRR-232  89

暫無
暫無

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

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