Python 如何根据列值的长度从数据帧中删除行?

Python 如何根据列值的长度从数据帧中删除行?,python,pandas,dataframe,string-length,Python,Pandas,Dataframe,String Length,在以下pandas.DataFframe中: df = alfa beta ceta a,b,c c,d,e g,e,h a,b d,e,f g,h,k j,k c,k,l f,k,n 如何删除alfa的列值超过2个元素的行?这可以通过使用长度函数来实现,我知道,但没有找到具体的答案 df = df[['alfa'].str.split(',').map(len) < 3] df=df[['alfa'].str.sp

在以下
pandas.DataFframe
中:

df = 
    alfa    beta   ceta
    a,b,c   c,d,e  g,e,h
    a,b     d,e,f  g,h,k
    j,k     c,k,l  f,k,n
如何删除alfa的列值超过2个元素的行?这可以通过使用长度函数来实现,我知道,但没有找到具体的答案

df = df[['alfa'].str.split(',').map(len) < 3]
df=df[['alfa'].str.split(',').map(len)<3]

您可以使用
pandas.DataFrame.apply()

这个怎么样

df = df[df['alpha'].str.split(',', expand=True)[2].isnull()]
使用
expand=True
为列表中的每个项目创建一个新的数据框,其中包含一列。如果列表有三个或更多项,则第三列将具有非空值


这种方法的一个问题是,如果列表中没有三个或三个以上的项,则选择列
[2]
将导致
键错误。基于此,使用@Stephen Rauch发布的解决方案更安全。

至少有两种方法可以将给定的
DF
子集:

1) 在逗号分隔符上拆分,然后计算生成的
列表的长度

df[df['alfa'].str.split(",").str.len().lt(3)]
2) 计算逗号数,并在结果中添加1以说明最后一个字符:

df[df['alfa'].str.count(",").add(1).lt(3)] 
两者都产生:


这是@NickilMaveli答案的
numpy
版本

mask = np.core.defchararray.count(df.alfa.values.astype(str), ',') <= 1
pd.DataFrame(df.values[mask], df.index[mask], df.columns)

  alfa   beta   ceta
1  a,b  d,e,f  g,h,k
2  j,k  c,k,l  f,k,n

mask=np.core.defchararray.count(df.alfa.values.astype(str),“,”)这里有一个最容易记住的选项,它仍然包含熊猫的“流血心脏”数据帧:

1) 在dataframe中创建一个新列,其长度值为:

df['length'] = df.alfa.str.len()
2) 使用新列编制索引:

df = df[df.length < 3]
每个回路359µs±6.83µs(7次运行的平均值±标准偏差,每个1000个回路)

步骤2:

df = df[df.length < 3]
df=df[df.length<3]
每个回路627µs±76.9µs(7次运行的平均值±标准偏差,每个1000个回路)

好消息是,当尺寸增大时,时间不会线性增长。例如,对30000行数据执行相同的操作大约需要3ms(因此10000x数据,3x速度增加)。熊猫数据帧就像一列火车,需要能量才能运行(所以在绝对比较下,对小事情来说不是很好,但客观上它并不重要……因为对于小数据,事情无论如何都很快)

df = df[df.length < 3]
%timeit df['length'] = df.alfa.str.len()
df = df[df.length < 3]