Home > Back-end >  create dataframe from lists of different size
create dataframe from lists of different size

Time:10-06

Could you help me to find a way to create a dataframe from a list Here is an example:

['E139', 'E216', 'E248', 'E111', 'E91', 'E245', 'E88']
['E102', 'E139', 'E216', 'E238', 'E186', 'E111', 'E91', 'E88']
['E256', 'E46', 'E232', 'E139', 'E37', 'E216', 'E235', 'E73', 'E91', 'E88']
['E230', 'E31', 'E198', 'E237', 'E233', 'E10', 'E120', 'E46', 'E82', 'E25', 'E164', 'E253', 'E104', 'E54', 'E18']

I would like to have the following output:

['E139', 'E216', 'E248', 'E111', 'E91', 'E245', 'E88','NaN','NaN','NaN','NaN','NaN','NaN','NaN','NaN']
['E102', 'E139', 'E216', 'E238', 'E186', 'E111', 'E91', 'E88','NaN','NaN','NaN','NaN','NaN','NaN','NaN']
['E256', 'E46', 'E232', 'E139', 'E37', 'E216', 'E235', 'E73', 'E91', 'E88', 'NaN','NaN','NaN','NaN','NaN']
['E230', 'E31', 'E198', 'E237', 'E233', 'E10', 'E120', 'E46', 'E82', 'E25', 'E164','E253', 'E104', 'E54', 'E18']

before creating the dataframe. Thanks for your help

CodePudding user response:

try this:

a = {'E139', 'E216', 'E248', 'E111', 'E91', 'E245', 'E88'}
b = {'E102', 'E139', 'E216', 'E238', 'E186', 'E111', 'E91', 'E88'}
c = {'E256', 'E46', 'E232', 'E139', 'E37', 'E216', 'E235', 'E73', 'E91', 'E88'}
d = {'E230', 'E31', 'E198', 'E237', 'E233', 'E10', 'E120', 'E46', 'E82', 'E25', 'E164', 'E253', 'E104', 'E54', 'E18'}


df = pd.DataFrame([a,b,c,d])

If you have dictionary format, you can try follows:

dict_ = dict({'key1' : ['E139', 'E216', 'E248', 'E111', 'E91', 'E245', 'E88'],
              'key2' : ['E102', 'E139', 'E216', 'E238', 'E186', 'E111', 'E91', 'E88'],
              'key3' : ['E256', 'E46', 'E232', 'E139', 'E37', 'E216', 'E235', 'E73', 'E91', 'E88'],
              'key4' : ['E230', 'E31', 'E198', 'E237', 'E233', 'E10', 'E120', 'E46', 'E82', 'E25', 'E164', 'E253', 'E104', 'E54', 'E18']
              })
df = pd.DataFrame(list(dict_.values()))

CodePudding user response:

First, get the max lenth of the lists what will be the lenth the lists would have be in the result. Fill up every list with NaNs to the required lenth.

data = [ ['E139', 'E216', 'E248', 'E111', 'E91', 'E245', 'E88'],
['E102', 'E139', 'E216', 'E238', 'E186', 'E111', 'E91', 'E88'],
['E256', 'E46', 'E232', 'E139', 'E37', 'E216', 'E235', 'E73', 'E91', 'E88'],
['E230', 'E31', 'E198', 'E237', 'E233', 'E10', 'E120', 'E46', 'E82', 'E25', 'E164', 'E253', 'E104', 'E54', 'E18']]


lenth = len(max(data, key=len))  # the lenth the lists have to be

for arr in data:
    arr  = ['NaN'] * (lenth - len(arr))  # adding required 'NaN's
>>> print(data)
[
    ['E139', 'E216', 'E248', 'E111', 'E91', 'E245', 'E88', 'NaN', 'NaN', 'NaN', 'NaN', 'NaN', 'NaN', 'NaN', 'NaN'],
    ['E102', 'E139', 'E216', 'E238', 'E186', 'E111', 'E91', 'E88', 'NaN', 'NaN', 'NaN', 'NaN', 'NaN', 'NaN', 'NaN'],
    ['E256', 'E46', 'E232', 'E139', 'E37', 'E216', 'E235', 'E73', 'E91', 'E88', 'NaN', 'NaN', 'NaN', 'NaN', 'NaN'],
    ['E230', 'E31', 'E198', 'E237', 'E233', 'E10', 'E120', 'E46', 'E82', 'E25', 'E164', 'E253', 'E104', 'E54', 'E18']
]
  • Related