Python 筛选列中第一个字母为/不是特定值的行
如何过滤掉一系列数据(在数据框中),其中我不希望第一个字母是“Z”或任何其他字符 我有以下数据帧df(其中有>25000行) 我正在尝试删除场地第一个字母为“Z”的所有行 例如,我通常的筛选代码类似于(筛选出场地='066'的所有行)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
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