连接数据框中的所有列,包括列名和分隔符
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
我正在使用 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