2016-12-16 34 views
2

我读取并过滤excel文件后,看起来像这样的熊猫数据框。仅针对包含行的字符串过滤pandas列

Col1 Col2 
afaf abc 1 
1512   
asda cdd 2 
adsd   

我试图用

Col1 Col2 
afaf abc1 
asda cdd2 

落得我试图df['Col2'].replace('',np.nan,inplace=True)并做dropna后但没有被替换,所以我认为,它不能取代因为COLUMN2有不止一个那些空行中的空间。

我忘了提及我不能使用strip,因为Col2字符串有我需要保持不变的空格。

任何想法?

+0

所以基本上过滤掉哪里有什么在col2的或类似的东西的行? –

+0

是的,那将是预期的结果:) –

回答

4

我认为你可以使用boolean indexing与条件由strip删除一些可能的空格,然后检查是否length通过len0

print (df[df.Col2.str.strip().str.len() != 0]) 
    Col1 Col2 
0 afaf abc 1 
2 asda cdd 2 

如果没有空格:

df[df.Col2.str.len() != 0] 
2

可以使用pandas str.strip()功能去除色谱柱。这应该删除所有的空白。

它可能看起来像这样

df['Col2'].str.strip().replace('',np.nan,inplace=True) 

因此,使用pipe您可以接收非南行作为

df.iloc[df.pipe(lambda x:x['Col2'].str.strip().replace('',np.nan)).dropna().index] 

后者,更新的解决方案,也适用在你额外的空格约束。不过,请注意,我在发布约束之前使用了管道。

现在,我会选择例如像Jezrael的一个解决方案,但配制成

df[df['Col2'].str.strip() !=''] 

我想,这比使用LEN函数

刚刚执行上一个非常小的数据帧一些基准更清晰一点。 PirSquared解决方案是最快的,其次是Jezrael,其次是我的解决方案,使用“'比较。最后的地方是管道变体。

2

使用str.match

df[~df.Col2.str.match(r'^\s*$')] 

enter image description here

相关问题