【问题标题】:Concatenate columns with pandas用 pandas 连接列
【发布时间】:2019-06-19 01:34:47
【问题描述】:

我正在尝试将几列连接在一起

数据框:

df

   One  Two
0    a    d
1    b    e
2    c    f

我试过了:

df['all_columns'] = df.apply(''.join, axis = 1)

错误:

TypeError: ('sequence item 1: expected str instance, float found', 'occured at index 0')

我预计:

df

   all_columns  
0            a    
1            b    
2            c    
3            d
4            e
5            f

我正在尝试一个解决方案,而不必使用我的列的名称,因为它们的名称非常大

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    你需要简单的unstack:

    df.unstack().reset_index(drop=True).to_frame('allcolumns')
    

    输出:

        allcolumns
    0   a
    1   b
    2   c
    3   d
    4   e
    5   f
    

    【讨论】:

    • 值得注意的是,stack/unstack 系列实现了很多内部整形逻辑,所以比 concat 慢一些。
    【解决方案2】:

    pd.concat

    # @piR's magic
    pd.concat(map(df.get, df), ignore_index=True).to_frame('all_cols')
    
      all_cols
    0        a
    1        b
    2        c
    3        d
    4        e
    5        f
    

    更多concat选项:

    pd.concat(dict(df.items()), ignore_index=True).to_frame('all_columns')
    pd.concat({**df}, ignore_index=True).to_frame('all_columns')
    
      all_cols
    0        a
    1        b
    2        c
    0        d
    1        e
    2        f
    

    ravel + DataFrame() 重构

    pd.DataFrame(df.to_numpy().ravel('F'), columns=['all_cols'])
    
      all_cols
    0        a
    1        b
    2        c
    3        d
    4        e
    5        f
    

    melt 有家政服务

    df.melt(value_name='all_columns').drop('variable', 1)
    
      all_columns
    0           a
    1           b
    2           c
    3           d
    4           e
    5           f
    

    【讨论】:

    • pd.concat 可以采用可迭代的pd.concat(map(df.get, df), ignore_index=True).to_frame('all_columns')
    • 另外,不需要转置。使用fortran排序pd.DataFrame(df.to_numpy().ravel('F'), columns=['all_cols'])
    • 还有一个。您可以将字典传递给pd.concat,但除非您强制,否则它不会在字典上下文中解释数据帧。 pd.concat({**df}, ignore_index=True).to_frame('all_columns')
    • @WeNYoBen 我选择了我想到的第一个选项,但融化会很好用;)df.melt(value_name='all_columns').drop('variable', 1)你现在应该发布它
    • @cs95 不用担心,你可以添加到你的 :-)
    【解决方案3】:

    所以我知道你想将所有列值合并到一个列中
    df
    Prefix Assignment Tutorial Midterm TakeHome Final
    5 57.14 34.09 64.38 51.48 52.50
    所以最终结果应该是



    final df

    all_columns
    5
    57.14
    34.09
    64.38
    51.48
    52.50

    你可以这样做: final_res = pd.DataFrame(data={"all_columns":list(df.values.flatten())})

    【讨论】:

      猜你喜欢
      • 2013-11-09
      • 2019-05-19
      • 2021-09-23
      • 2019-11-28
      • 2021-05-06
      • 1970-01-01
      • 2020-03-14
      • 2020-05-26
      • 1970-01-01
      相关资源
      最近更新 更多