代码之家  ›  专栏  ›  技术社区  ›  It_is_Chris

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

  •  0
  • It_is_Chris  · 技术社区  · 7 年前

    假设此数据帧:

    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 回复  |  直到 7 年前
        1
  •  1
  •   BENY    7 年前

    使用 str.split 然后我们使用 stack 把宽改长 str.len 过滤你的测向仪

    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
    
        2
  •  1
  •   rafaelc    7 年前

    只是 str.split sum 获取所有值列表的序列。然后过滤新的df >= 6 伦恩

    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