将第二层中不等元素的python嵌套列表转换为数据帧

时间:2016-07-05 04:05:15

标签: python pandas dataframe merge

假设我有一个嵌套列表,第二层中的元素数量不等,如a=[[1,2,3],[4,5],[6,7,8,9]]。我也有相应的列表,包含日期变量,如b=[['Mon','Tues','Wed'],['Mon','Wed'],['Mon','Tues','Wed','Thur']]。我想将ab转换为pandas dataframes,因为它可以接收不相等的行,然后我想将ab结合起来进入一个dataframe并在三个日期列上执行merge,以查找公共日期和相应的值。但是我不确定如何将嵌套列表转换为数据帧。我尝试将它们转换为np.array,但它无法保持不等的行。

2 个答案:

答案 0 :(得分:1)

我能想到的最好的方法是将每条记录压缩成字典,为该行创建单行数据帧,然后将此行连接(或外连接)到前一行。这是代码:

a = [[1,2,3],[4,5],[6,7,8,9]]
b = [['Mon','Tues','Wed'],['Mon','Wed'],['Mon','Tues','Wed','Thur']]
df = pd.DataFrame()

for row in zip(a,b):
    d = dict(zip(row[1], row[0]))
    dfrow = pd.DataFrame(d, index=[0]) #Dataframe for 1 row
    df = pd.concat([df, dfrow])

给出这个:

   Mon  Thur  Tues  Wed
0    1   NaN   2.0    3
0    4   NaN   NaN    5
0    6   9.0   7.0    8

答案 1 :(得分:0)

我想这样的事情[dict(zip(keysA,keysB)) for keysA,keysB in zip(a,b)] ......但它与熊猫或者numpy无关......

>>> a=[[1,2,3],[4,5],[6,7,8,9]]
>>> b=[['Mon','Tues','Wed'],['Mon','Wed'],['Mon','Tues','Wed','Thur']]
>>> print [dict(zip(keysA,keysB)) for keysA,keysB in zip(a,b)]
[{1: 'Mon', 2: 'Tues', 3: 'Wed'}, {4: 'Mon', 5: 'Wed'}, {8: 'Wed', 9: 'Thur', 6: 'Mon', 7: 'Tues'}]

或者您可能想要将日期名称切换为键而不是数字......从您的问题中不是很清楚......

(类似于df = DataFrame([dict(zip(keysB,keysA)) for keysA,keysB in zip(a,b)])