根据列值的长度过滤数据帧行

D.p*_*prd 5 pandas

我有一个pandas数据帧如下:

df = pd.DataFrame([ [1,2], [np.NaN,1], ['test string1', 5]], columns=['A','B'] )

df
              A  B
0             1  2
1           NaN  1
2  test string1  5
Run Code Online (Sandbox Code Playgroud)

我正在使用熊猫0.20.删除"任何"列值大于10的任何行的最有效方法是什么?

len('test string1')12

所以对于上面的例子,我期望输出如下:

df
              A  B
0             1  2
1           NaN  1
Run Code Online (Sandbox Code Playgroud)

Zer*_*ero 9

如果基于列 A

In [865]: df[~(df.A.str.len() > 10)]
Out[865]:
     A  B
0    1  2
1  NaN  1
Run Code Online (Sandbox Code Playgroud)

如果基于所有列

In [866]: df[~df.applymap(lambda x: len(str(x)) > 10).any(axis=1)]
Out[866]:
     A  B
0    1  2
1  NaN  1
Run Code Online (Sandbox Code Playgroud)


小智 9

我必须将迭戈的答案转换为字符串才能起作用:

df = df[df['A'].apply(lambda x: len(str(x)) <= 10)]
Run Code Online (Sandbox Code Playgroud)