将多个数据框列转换为一系列

时间:2019-10-10 11:57:13

标签: python-3.x pandas for-loop

我有一个数据集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”)连接到列表

3 个答案:

答案 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)连接所有列,但不包含 它们之间有空格。