Python 筛选列中第一个字母为/不是特定值的行

Python 筛选列中第一个字母为/不是特定值的行,python,python-3.x,pandas,dataframe,filter,Python,Python 3.x,Pandas,Dataframe,Filter,如何过滤掉一系列数据(在数据框中),其中我不希望第一个字母是“Z”或任何其他字符 我有以下数据帧df(其中有>25000行) 我正在尝试删除场地第一个字母为“Z”的所有行 例如,我通常的筛选代码类似于(筛选出场地='066'的所有行) df = df[df.Venue != '066'] 我可以看到这个过滤器行按数组过滤出我需要的内容,但我不确定如何在过滤器上下文中指定它 [k for k in df.Venue if 'Z' not in k] 使用str[0]选择第一个值或使用,使用re

如何过滤掉一系列数据(在数据框中),其中我不希望第一个字母是“Z”或任何其他字符

我有以下数据帧df(其中有>25000行)

我正在尝试删除场地第一个字母为“Z”的所有行

例如,我通常的筛选代码类似于(筛选出场地='066'的所有行)

df = df[df.Venue != '066']
我可以看到这个过滤器行按数组过滤出我需要的内容,但我不确定如何在过滤器上下文中指定它

[k for k in df.Venue if 'Z' not in k]

使用
str[0]
选择第一个值或使用,使用regex
^
作为字符串的开头。对于反转,使用了
~

df1 = df[df.Venue.str[0] != 'Z']

df1 = df[~df.Venue.str.startswith('Z')]

df1 = df[~df.Venue.str.contains('^Z')]
如果没有
NaN
s值,则使用列表理解:

df1 = df[[x[0] != 'Z' for x in df.Venue]]

df1 = df[[not x.startswith('Z') for x in df.Venue]]
对于没有
NaN
值的情况,可以将序列的NumPy表示形式转换为类型

df1 = df[[x[0] != 'Z' for x in df.Venue]]

df1 = df[[not x.startswith('Z') for x in df.Venue]]
df1 = df[df['A'].values.astype('<U1') != 'Z']
from string import ascii_uppercase
from random import choice

L = [''.join(choice(ascii_uppercase) for _ in range(10)) for i in range(100000)]
df = pd.DataFrame({'A': L})

%timeit df['A'].values.astype('<U1') != 'Z'       # 4.05 ms per loop
%timeit [x[0] != 'Z' for x in df['A']]            # 11.9 ms per loop
%timeit [not x.startswith('Z') for x in df['A']]  # 23.7 ms per loop
%timeit ~df['A'].str.startswith('Z')              # 53.6 ms per loop
%timeit df['A'].str[0] != 'Z'                     # 53.7 ms per loop
%timeit ~df['A'].str.contains('^Z')               # 127 ms per loop