在str范围内使用find-in-pandas数据帧

2024-05-23 17:25:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个dataframe列

   code
0. Slip - Trans:S-BRT4-S-BRT4-98683Store:S-BRT4Terminal:S-BRT4
1. Slip - Trans:M-BXP2-M-BX2-65459Store:M-BXP2Terminal:M-BXP2
2. Slip - Trans:M-YyL2-M-YyL2-93949Store:M-YyL2Terminal:M-YyL2

我想在另一个名为“TTT”的列中指定一个字符串(粗体以下),如下所示

   code                                                          TTT
0. Slip - Trans:**S-BRT4-S-BRT4-98683**Store:S-BRT4Terminal:S-BRT4   S-BRT4-S-BRT4-98683
1. Slip - Trans:**M-BXP2-M-BX2-65459**Store:M-BXP2Terminal:M-BXP2    M-BXP2-M-BX2-65459
2. Slip - Trans:**M-YyL2-M-YyL2-93949**Store:M-YyL2Terminal:M-YyL2   M-YyL2-M-YyL2-93949

起始编号是固定的13,结束是动态的,因此我在.str中使用Find('Store:'),我使用以下代码

df['TTT']= df['code'].str[13:df['code'].str.find('Store:')]

上面的代码给出的是NaN而不是必需的字符串

那不行,你能帮我一下吗


Tags: store字符串dftranscodeslipstrttt
2条回答

如果需要介于Trans::和Store:之间的值,请使用^{}

df['TTT']= df['code'].str.extract('Trans:(.*)Store:', expand=False)
print (df)
                                                code                  TTT
0  Slip - Trans:S-BRT4-S-BRT4-98683Store:S-BRT4Te...  S-BRT4-S-BRT4-98683
1  Slip - Trans:M-BXP2-M-BX2-65459Store:M-BXP2Ter...   M-BXP2-M-BX2-65459
2  Slip - Trans:M-YyL2-M-YyL2-93949Store:M-YyL2Te...  M-YyL2-M-YyL2-93949

split的另一个想法:

df['TTT']= df['code'].str.split('Store:').str[0].str.split('Trans:').str[1]
print (df)
                                                code                  TTT
0  Slip - Trans:S-BRT4-S-BRT4-98683Store:S-BRT4Te...  S-BRT4-S-BRT4-98683
1  Slip - Trans:M-BXP2-M-BX2-65459Store:M-BXP2Ter...   M-BXP2-M-BX2-65459
2  Slip - Trans:M-YyL2-M-YyL2-93949Store:M-YyL2Te...  M-YyL2-M-YyL2-93949

您的解决方案不能像这样使用:

df['TTT']= df['code'].str.split('Store:').str[0].str[13:]
print (df)
                                                code                  TTT
0  Slip - Trans:S-BRT4-S-BRT4-98683Store:S-BRT4Te...  S-BRT4-S-BRT4-98683
1  Slip - Trans:M-BXP2-M-BX2-65459Store:M-BXP2Ter...   M-BXP2-M-BX2-65459
2  Slip - Trans:M-YyL2-M-YyL2-93949Store:M-YyL2Te...  M-YyL2-M-YyL2-93949

而是在Store:上拆分:

df['TTT']= df['code'].str.split("Store:",expand=True)[1]

相关问题 更多 >