代码之家  ›  专栏  ›  技术社区  ›  Jessica Warren

使用pandas,如何根据第一个空格进行拆分。

  •  2
  • Jessica Warren  · 技术社区  · 7 年前

    所以我有一列代码:“dataset.csv”

    0020-004241 purple
    00532 - Blue
    00121 - Yellow
    055 - Greem
    0025-097 - Orange
    

    期望输出:

    code              name_of_code
        0020-004241         purple 
        00532               blue 
    

    我想把代码和代码的单词分成两列。

    我试过:

    df =pandas.read_csv(dataset.txt)

    df = pandas.concat([df, df.columnname.str.split('/s', expand=True)], 1)
    df = pandas.concat([df, df.columnname.str.split('-', expand=True)], 1)
    

    ` 它意外地输出了: 紫色无 蓝色无 黄色无 绿色无 橙色无

    如何正确分割这些数据?

    4 回复  |  直到 7 年前
        1
  •  2
  •   Rakesh    7 年前

    使用 str.split(" ", 1)

    前任:

    import pandas as pd
    df = pd.read_csv(filename,names=['code'])
    df[['code','name_of_code']] = df["code"].str.split(" ", 1, expand=True)
    df["name_of_code"] = df["name_of_code"].str.strip("-")
    print(df)
    

    输出:

              code name_of_code
    0  0020-004241       purple
    1        00532         Blue
    2        00121       Yellow
    3          055        Greem
    4     0025-097       Orange
    
        2
  •  2
  •   jpp    7 年前

    您可以通过几个分离调用来处理此问题:

    df = pd.DataFrame({'col': ['0020-004241 purple', '00532 - Blue',
                               '00121 - Yellow', '055 - Greem',
                               '0025-097 - Orange']})
    
    df[['col1', 'col2']] = df['col'].str.split(n=1, expand=True)
    df['col2'] = df['col2'].str.split().str[-1]
    
    print(df)
    
                      col         col1    col2
    0  0020-004241 purple  0020-004241  purple
    1        00532 - Blue        00532    Blue
    2      00121 - Yellow        00121  Yellow
    3         055 - Greem          055   Greem
    4   0025-097 - Orange     0025-097  Orange
    
        3
  •  1
  •   Oleh Rybalchenko    7 年前

    加载csv时可以使用regex作为分隔符,以避免进一步拆分。

    from io import StringIO
    import pandas as pd
    
    file = StringIO(
        """0020-004241 purple
        00532 - Blue
        00121 - Yellow
        055 - Greem
        0025-097 - Orange"""
    )
    
    df = pd.read_csv(file, sep='\s+\-*\s*', header=None)
    

    当然,您可以添加标题,但我在这个示例中试图保持接近您的初始输入。

    现在 read_csv 生成以下df:

                 0       1
    0  0020-004241  purple
    1        00532    Blue
    2        00121  Yellow
    3          055   Greem
    4     0025-097  Orange
    
        4
  •  0
  •   ALollz    7 年前

    你也可以使用 .str.extract 一个正则表达式。

    df[['code', 'name_of_code']] = df.col.str.extract('(.*\d+)\s-?\s?(.*)', expand=True)
    
    print(df)
                      col         code name_of_code
    0  0020-004241 purple  0020-004241       purple
    1        00532 - Blue        00532         Blue
    2      00121 - Yellow        00121       Yellow
    3         055 - Greem          055        Greem
    4   0025-097 - Orange     0025-097       Orange