【问题标题】:Concatenating all columns in pandas dataframe连接熊猫数据框中的所有列
【发布时间】:2020-05-13 16:53:32
【问题描述】:

我正在尝试连接 pandas 数据帧的所有列,以便最终得到 1 列,其中包含数据帧中的所有值。下面的代码就是这样做的:

df2 = pd.concat([df[0], df[1], df[2], df[3], df[4], df[5], df[6], df[7]])

但我希望能够对具有不同列数的数据框执行此操作。当我尝试时:

dfpr2 = pd.concat([df.columns)

我收到以下错误: “无法连接 <class 'pandas.core.indexes.range.RangeIndex> 类型的对象;只有 Series 和 DataFrame obj 有效

有没有办法解决这个问题?我尝试设置ignore_index = True,但这似乎也没有帮助。谢谢!!

【问题讨论】:

    标签: python pandas concat


    【解决方案1】:
    Timing for different methods : 
    
    %timeit df.iloc[:,0].str.cat(df.iloc[:,1:].astype(str),',')
    880 µs ± 28.2 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
    
    %timeit df.astype(str).agg('|'.join,axis=1)
    1.45 ms ± 39 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
    
    %timeit df.astype(str).sum(axis=1)
    562 µs ± 11.7 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
    
    %timeit [','.join(ent) for ent in df.astype(str).to_numpy()]
    350 µs ± 6.48 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
    

    我认为@cs95 有一篇关于字符串的 stackoverflow 帖子。对于字符串,当在 Python 中完成计算时,它们的速度要快得多。

    【讨论】:

      【解决方案2】:

      IIUCdf.astype(str).sum(axis=1)

      df = pd.DataFrame({'A' : ['A','B','C'],
                   'B' : [0,1,2],
                   'C' : ['2019-01-10','2020-01-10','2021-01-10']})
      
      df['hash'] = df.astype(str).sum(axis=1)
      
      print(df)
      
         A  B           C          hash
      0  A  0  2019-01-10  A02019-01-10
      1  B  1  2020-01-10  B12020-01-10
      2  C  2  2021-01-10  C22021-01-10
      

      如果您需要自定义分隔符,请使用.agg

      df.astype(str).agg('|'.join,axis=1)
      
      0    A|0|2019-01-10
      1    B|1|2020-01-10
      2    C|2|2021-01-10
      

      【讨论】:

      • 快速提问:如何将sum 与分隔符结合起来?
      • 太棒了,干杯。虽然我感觉agg 的性能不如sum
      • @MarkWang 字符串方法通常很慢,但我同意, agg 会比 sum 慢,但我没有测试它通常你想连接所有列来创建某种代理键,所以它是更新表格时必须采取的措施
      【解决方案3】:

      这是一种连接列值的简单方法

      df1 = df['1st Column Name'] + df['2nd Column Name'] + ...
      

      【讨论】:

        猜你喜欢
        • 2020-10-13
        • 1970-01-01
        • 2021-07-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-07-11
        • 2018-10-09
        相关资源
        最近更新 更多