【问题标题】:Pandas add new columns based on splitting another columnPandas 基于拆分另一列添加新列
【发布时间】:2016-12-21 18:12:56
【问题描述】:

我有一个如下所示的 pandas 数据框:

A              B
US,65,AMAZON   2016
US,65,EBAY     2016

我的目标是变成这样:

A              B      country    code    com
US.65.AMAZON   2016   US         65      AMAZON
US.65.AMAZON   2016   US         65      EBAY

我知道在herehere 之前有人问过这个问题,但是没有一个对我有用。我试过了:

df['country','code','com'] = df.Field.str.split('.')

df2 = pd.DataFrame(df.Field.str.split('.').tolist(),columns = ['country','code','com','A','B'])

我错过了什么吗?非常感谢任何帮助。

【问题讨论】:

    标签: python pandas dataframe split multiple-columns


    【解决方案1】:

    您可以使用split 和参数expand=True 并在左侧添加一个[]

    df[['country','code','com']] = df.A.str.split(',', expand=True)
    

    然后replace,.

    df.A = df.A.str.replace(',','.')
    
    print (df)
                  A     B country code     com
    0  US.65.AMAZON  2016      US   65  AMAZON
    1    US.65.EBAY  2016      US   65    EBAY
    

    如果没有NaN 值,则使用DataFrame 构造函数的另一种解决方案:

    df[['country','code','com']] = pd.DataFrame([ x.split(',') for x in df['A'].tolist() ])
    df.A = df.A.str.replace(',','.')
    print (df)
                  A     B country code     com
    0  US.65.AMAZON  2016      US   65  AMAZON
    1    US.65.EBAY  2016      US   65    EBAY
    

    您也可以在构造函数中使用列名,但concat 是必需的:

    df1=pd.DataFrame([x.split(',') for x in df['A'].tolist()],columns= ['country','code','com'])
    df.A = df.A.str.replace(',','.')
    df = pd.concat([df, df1], axis=1)
    print (df)
                  A     B country code     com
    0  US.65.AMAZON  2016      US   65  AMAZON
    1    US.65.EBAY  2016      US   65    EBAY
    

    【讨论】:

    • 专门针对第二种方法的很好的解释。非常感谢
    【解决方案2】:

    为了获得新的列,我希望这样做:

    df['Country'] = df['A'].apply(lambda x: x[0])
    df['Code'] = df['A'].apply(lambda x: x[1])
    df['Com'] = df['A'].apply(lambda x: x[2])
    

    至于将替换为可以使用如下:

    df['A'] = df['A'].str.replace(',','.')
    

    【讨论】:

      【解决方案3】:

      这不会像预期的那样给出输出 它只会给 df['A'] 第一个值,即 'U'

      可以根据提供的数据创建列 df1=pd.DataFrame([x.split(',') for x in df['A'].tolist()],columns= ['country','code','com'])

      也可以用for lambda代替

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-02
        相关资源
        最近更新 更多