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