根据空格分隔的字符长度删除值

时间:2018-07-26 01:31:59

标签: python-3.x pandas

假设此DataFrame:

df = pd.DataFrame({'Col1':['1 123456 789012','654321','123 123457', '123458 123459']})


     Col1
0   1 123456 789012
1   654321
2   123 123457
3   123458 123459

我本质上想删除所有用空格隔开的不是6个字符的内容。我正在寻找此输出:

     Col1
0   123456 789012
1   654321
2   123457
3   123458 123459 

最终,我正在寻找此输出,但这也许是一个不同的问题:

    Col1
0   123456
1   789012
2   654321
3   123457
4   123458
5   123459 

我相信我可以通过df.str.split(expand=True)完成后者,但我尚未进行测试。任何意见是极大的赞赏。我正在寻找任何方向,因为我不知道从哪里开始。我已经尝试过df.str.replace(),但是需要替换的可能性尚不清楚。

2 个答案:

答案 0 :(得分:1)

使用str.split,然后我们使用stack将width更改为long,并使用str.len过滤df

s=df.Col1.str.split(expand=True)
s.stack()[s.stack().str.len()==6].to_frame('col1')
Out[516]: 
       col1
0 1  123456
  2  789012
1 0  654321
2 1  123457
3 0  123458
  1  123459

答案 1 :(得分:1)

只需str.splitsum系列即可获得所有值的列表。然后为>= 6 len

过滤新的df
df2 = pd.DataFrame(df.Col1.str.split().sum(), columns=['c'])
df2[df2.c.str.len() >= 6]

    c
1   123456
2   789012
3   654321
5   123457
6   123458
7   123459