连接数据框中的所有列,包括列名和分隔符

Concatenate all columns in a dataframe, including column name and delimiters

我正在使用 Python 将大型数据集导入 Pandas Dataframe。这些数据集有 10k+ 行和 1k+ 列。我需要连接所有列值以及列名和其他分隔符。我已经使用 For 循环来解决这个问题,它工作正常,但是非常慢并且行太多会导致内存不足错误。

col 1     col 2     col 3...
val1      val2      val3 ...
val4      val5      val6

进入

ConcatValues
Col 1=val1|Col 2=val2|Col 3=val3...
Col 1=val4|Col 2=val5|Col 3=val6...

我当前的解决方案如下所示,它添加了一个新列“ConcatValues”:

cols = df.columns
for col in cols[1:]:
     df["ConcatValues"] = df["ConcatValues"].astype(str) + "|" + col + "=" +  df[col].astype(str)

我已经尝试使用 Apply 和 lambda 来实现类似的功能:

df["ConcatValues"] = df[cols].apply(lambda x : str(x.name)+'='+x+"|",axis=1)

但这不是连接列,只是连接值。

我读过几篇关于类似问题的帖子,但是 none 涉及将列名或其他字符与值连接起来。

如有任何帮助,我们将不胜感激。

IIUC 这应该能满足您的期望

data = {
    'Column1' : ['1', '2', '3', '4'],
    'Column2' : ['1', '2', '3', '4'],
    'Column3' : ['1', '2', '3', '4']
}
df = pd.DataFrame(data)
for x in df.columns:
    df[x] = df[x].apply(lambda row : f"{x}={str(y)}")
df['merge_column'] = df.apply(lambda x : '|'.join(x), axis = 1)
df = df[['merge_column']]
df.to_csv('WheverEver you want it to go', index = False, header=False)
df

您可以使用:

df['ConcatValues'] = df.apply(lambda c: f'{c.name} = '+c).agg('|'.join, axis=1)

输出:

  col 1 col 2 col 3                            ConcatValues
0  val1  val2  val3  col 1 = val1|col 2 = val2|col 3 = val3
1  val4  val5  val6  col 1 = val4|col 2 = val5|col 3 = val6

或者,作为新的 DataFrame:

df2 = (df.apply(lambda c: f'{c.name} = '+c)
         .agg('|'.join, axis=1)
         .to_frame('ConcatValues')
       )

输出:

                             ConcatValues
0  col 1 = val1|col 2 = val2|col 3 = val3
1  col 1 = val4|col 2 = val5|col 3 = val6