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
很好用,谢谢。如果可以的话我会接受的。非常好用,谢谢。我会尽我所能接受的。