假设此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()
,但是需要替换的可能性尚不清楚。
答案 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.split
和sum
系列即可获得所有值的列表。然后为>= 6
len
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