首页 > 解决方案 > 在 str 范围内的 pandas 数据框中使用 find

问题描述

我有一个数据框列

   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,结束是动态的,所以我在中使用 Find('Store:') .str,我使用以下代码

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

上面的代码给了我NaN而不是必需的字符串。

那不工作你能帮我解决这个问题吗

标签: pythonpandas

解决方案


如果需要Trans:: 和Store:使用之间的值Series.str.extract

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

另一个想法 double 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

推荐阅读