добавление списков разной длины в новый фрейм данных - PullRequest
0 голосов
/ 25 мая 2020

У меня есть два списка с разной длиной, например a=[1,2,3] и b=[2,3]

Я хотел бы сгенерировать из них pd.DataFrame, добавив nan в начало списка, например:

   a  b
1  1  nan 
2  2  2
3  3  3

Я был бы признателен за чистый способ сделать это.

Ответы [ 2 ]

2 голосов
/ 25 мая 2020

Используйте itertools.zip_longest с reversed метод:

from  itertools import  zip_longest
a=[1,2,3] 
b=[2,3]

L = [a, b]
iterables = (reversed(it) for it in L)
out = list(reversed(list(zip_longest(*iterables, fillvalue=np.nan))))

df = pd.DataFrame(out, columns=['a','b'])
print (df)
   a    b
0  1  NaN
1  2  2.0
2  3  3.0

Альтернатива, если b имеет меньше значений, например a list:

df = pd.DataFrame(list(zip(a, ([np.nan]*(len(a)-len(b)))+b)), columns=['a','b'])
print (df)
   a    b
0  1  NaN
1  2  2.0
2  3  3.0
1 голос
/ 25 мая 2020
b.append(np.nan)#append NaN
b=list(set(b))#Use set to rearrange and then return to list
df=pd.DataFrame(list(zip(a,b)), columns=['a','b'])#dataframe

Alternatively
b.append(np.nan)#append NaN
b=list(dict.fromkeys(b))#Use dict to rearrange and return then to list.This creates dict with the items in the list as keys and values as none but in an ordered manner getting NaN to the top
df=pd.DataFrame(list(zip(a,b)), columns=['a','b'])#dataframe

enter image description here

...