我正在尝试使用要在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
。
答案 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_x
和res_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)