在非数字列中搜索字符串值

searching a string value in a non-numeric column

在包含 20000 场国际象棋比赛的数据框中,有一列名为 opening_name

此列中的所有值都是这样的字符串:

1        Nimzowitsch Defense: Kennedy Variation
2         King's Pawn Game: Leonardis Variation
3        Queen's Pawn Game: Zukertort Variation
4                              Philidor Defense
                          ...                  
20053                             Dutch Defense
20054                              Queen's Pawn
20055           Queen's Pawn Game: Mason Attack
20056                              Pirc Defense
20057           Queen's Pawn Game: Mason Attack

在这个专栏中,有将近一百个具有相似名称的值,相似的名称如 Sicilian defence Sicilian defence: dragon variation 我想访问所有这些以字符串 [=12= 开头的值].我该怎么做?

据我了解,: 之前的字符串部分是起始字符串,其后的值是变体。

第 1 步:通过拆分提取所有行的前缀值:

df['base_term']=df.opening_name.apply(lambda x: x.split(":")[0])

这将 return 一个包含值或起始字符串的新列。

第 2 步:检索具有给定起始字符串的行,例如“西西里防御”。

res = df.loc[df.base_term=='Sicilian defence']

res 是具有 opening_name 以 'Sicilian defence'

开头的行的数据框

尝试使用 str 的矢量化方法。 使用 applylambda 函数效率非常低。

df.fname = df.opening_name.str.split(':').str[0]
0    Nimzowitsch Defense
1        Kings Pawn Game
2       Queens Pawn Game
3       Philidor Defense
dtype: object

只需使用.loc-

即可获取
df.loc[df.fname=='Sicilian defence']