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]