我试图将一个pandas数据框的所有列连接起来,以便最终得到一个包含数据框中所有值的列。下面的代码可以做到这一点。
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 objs有效。
有什么方法可以解决这个问题吗?我试过设置ignore_index=True,但似乎也没有用。谢谢!
IIUC df.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
这是一种简单的连接列值的方法。
df1 = df['1st Column Name'] + df['2nd Column Name'] + ...
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内完成时,它们的速度会快很多。