我有一个数据集df(250,3)250个原始数据和三列。我想编写一个循环,将数据框中每列的内容合并为一个具有250个原始数据和1列“ df_single”的单个系列(250,1)。手动操作如下:
df_single = df ['colour'] +“” + df ['model'] +“” + df ['size']
如何使用for循环或非手动创建df_single?
我试图用TypeError编写这段代码
df_conc=[]
for var in cols:
cat_list=df_code_part[var]
df_conc = df_conc+" "+cat_list
TypeError:只能将列表(而不是“ str”)连接到列表
答案 0 :(得分:1)
如果需要总和,则需要使用:
df_single=df.astype(str).add(' ').sum(axis=1).str.rstrip()
如果您不想添加所有列,则需要先选择它们:
columns=['colour','model','size']
df_single=df[columns].astype(str).add(' ').sum(axis=1).str.rstrip()
答案 1 :(得分:1)
我认为如果需要加入3列,那么您的解决方案就非常不错:
df_single = df['colour']+" "+df['model']+" "+df['size']
如果需要许多列的通用解决方案,请使用DataFrame.astype
转换为字符串,必要时使用DataFrame.add
来添加空格,sum
来连接并最后用Series.str.rstrip
删除行空白删除对白空格:
cols = ['color','model','size']
df_single = df[cols].astype(str).add(' ').sum(axis=1).str.rstrip()
或者:
df_single = df[cols].astype(str).apply(' '.join, axis=1)
答案 2 :(得分:1)
如果要在列之间留空格,请运行:
df.apply(' '.join, axis=1)
“普通” df.sum(axis = 1)连接所有列,但不包含 它们之间有空格。