为什么当字符足够长时它显示字符串索引超出范围?

Why does it shows string index out of range while the characters are long enough?

需要一些帮助来确定这里的问题。我正在尝试使用 Jupyter Notebook 中的 Pandas DataFrame 清理数据集。 我的 DataFrame 数据如下所示: Click here for the Dataframe

我正在尝试使用 for 循环来过滤和删除不包含任何 'B'、'R'、'T' 或 'L' 的行df2["Data"] 列中每个字符串的索引 11。

for unit in df2["Data"]:
    if unit[11] != "B":
        if unit[11] != "R":
            if unit[11] != "T":
                if unit[11] != "L":
                    df2.drop(df2.index[df2['Data'] == unit], inplace = True)

但是它提示这个错误说“字符串索引超出范围”,而如果你看字符串,例如“计算器BW_2_1:Number\ttt”它显然大于11字符,但不知道为什么它仍然提示这样的错误?

IndexError                                Traceback (most recent call last)
<ipython-input-15-e1d0470b9bfb> in <module>
      1 for unit in df2["Data"]:
----> 2     if unit[11] != "B":
      3         if unit[11] != "R":
      4             if unit[11] != "T":
      5                 if unit[11] != "L":

IndexError: string index out of range

使用 str 访问器和 isin:

df2 = df2[df2['Data'].str[11].isin(list('BRTL'))]
print(df2)

# Output
                   Data
1         Calculator BW

设置:

df2 = pd.DataFrame({'Data': ['Calculator DienInTol', 'Calculator BW']})
print(df2)

# Output
                   Data
0  Calculator DienInTol
1         Calculator BW

一步一步:

# Extract the eleventh character
>>> df2['Data'].str[11]
0    D
1    B
Name: Data, dtype: object

# Check if the character is in the list ['B', 'R', 'T', 'L']
>>> df2['Data'].str[11].isin(list('BRTL'))
0    False
1     True
Name: Data, dtype: bool

# Keep rows where the condition is true
>>> df2[df2['Data'].str[11].isin(list('BRTL'))]
            Data
1  Calculator BW

注意:list('BRTL') 创建列表 ['B', 'R', 'T', 'L']