连接数据帧中的所有列

2024-09-30 14:15:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试连接数据帧的所有列,以便最终得到一列,其中包含数据帧中的所有值。以下代码执行此操作:

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,但这似乎也没有帮助。谢谢


Tags: columns数据core类型pandasdf错误class
3条回答

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

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

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
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中完成计算时,它们的速度要快得多

相关问题 更多 >

    热门问题