Python 3.x 根据由空格分隔的字符长度删除值

Python 3.x 根据由空格分隔的字符长度删除值,python-3.x,pandas,Python 3.x,Pandas,假设此数据帧: 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

假设此数据帧:

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()
,但是不知道需要替换什么的可能性。

使用
str.split
,然后我们使用
stack
将宽变长,并
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

使用
str.split
,然后使用
stack
将宽更改为长,并使用
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

只需对序列进行
str.split
sum
即可获得所有值的列表。然后过滤
>=6的新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

只需对序列进行
str.split
sum
即可获得所有值的列表。然后过滤
>=6的新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

很好用,谢谢。如果可以的话我会接受的。非常好用,谢谢。我会尽我所能接受的。