如何在熊猫中将未知长度的数据帧列表与另一个数据帧连接起来?

时间:2019-05-16 08:35:44

标签: python python-3.x pandas

我正在尝试使用要在Tensor流的训练功能中使用的熊猫将数据帧列表与另一个数据帧串联起来。该列表包含未知数量的数据帧。

import pandas as pd

res_train_x = [a, b, c, d, e....]
# here each variable is a data frame. Ex: a = [], b = [], c = [] and so on
res_train_y  = aa

# this is how I need the code to work
result = pd.concat([a, b, c, d, e, ..., aa], axis=0)

# my existing code
result = pd.concat([res_train_x, res_train_y], axis=0)

运行现有代码时出现此错误。

  

TypeError:无法连接类型为“”的对象;只要   pd.Series,pd.DataFrame和pd.Panel(不建议使用)objs有效

在与res_train_x串联之前,我需要分离列表res_train_y

2 个答案:

答案 0 :(得分:1)

在提到错误消息时,至少要使串联起作用,列表的类型必须为pd.Series。为此,您只需在列表上应用pd.Series,然后即可进行串联。这是一个例子

import pandas as pd 
# given two lists a and b
a = [1, 2, 3]
b = [4, 5, 6]
# if you try to concatenate them with converting to pd.Series
pd.concat([a, b], axis=0)
# You will get a type error:
# TypeError: cannot concatenate object of type "<type 'list'>"; only pd.Series, pd.DataFrame, and pd.Panel (deprecated) objs are valid

# if you convert to pd.Series before concatenate, it works:
pd.concat([pd.Series(a), pd.Series(b)], axis=0)

示例输出为:

Out[5]: 
0    1
1    2
2    3
0    4
1    5
2    6
dtype: int64

用于修复示例的总体代码:

import pandas as pd 
res_train_x = [1, 2, 3]
res_train_y = [4, 5, 6]
result = pd.concat([pd.Series(res_train_x), pd.Series(res_train_y)], axis=0)

回答更新的问题:

如果res_train_xres_train_y都是数据框列表,则需要连接列表,然后连接数据框,如下所示:

all_dfs = res_train_x + res_train_y
result = pd.concat(all_dfs, axis=0)

答案 1 :(得分:0)

如果我正确理解了您的问题,则希望将列表res_train_x中的每个数据框连接到数据框aa

您可以将其循环如下:

for i in range(len(res_train_x)):
    new_df = pd.concat([res_train_x[i], res_train_y],axis=0)