Проблема создания фрейма данных в python - PullRequest
0 голосов
/ 05 апреля 2020
data={'a0':[[1,2,3]],'a1':[[5,6,2],[2,3]],'f1':[[2,5]]}

Мне нужно создать фрейм данных, используя эту команду, для которой я выполнил следующие команды:

for x in data:
    df[x]=pd.Series(data[x],index=None)
Output:
       a0         a1      f1
0  [1, 2, 3]  [5, 6, 2]  [2, 5]

Ожидаемый результат:

     a0         a1      f1
0  [1, 2, 3]  [5, 6, 2]  [2, 5]
1             [2,3]

Чего мне не хватает в код?

спасибо, Соня

Ответы [ 3 ]

0 голосов
/ 05 апреля 2020
data={'a0':[[1,2,3],''],'a1':[[5,6,2],[2,3]],'f1':[[2,5],'']}
df = pd.DataFrame(data)
df
0 голосов
/ 05 апреля 2020
import pandas as pd

Передает "данные", чтобы все массивы значений имели одинаковый размер

data={'a0':[[1,2,3]],'a1':[[5,6,2],[2,3]],'f1':[[2,5]]}
data
{'a0': [[1, 2, 3]], 'a1': [[5, 6, 2], [2, 3]], 'f1': [[2, 5]]}

rows=0
for k, v in data.items():
    if len(data[k]) >rows:
        rows = len(data[k])
    else:
        pass

for k,v in data.items():
    if rows > len(data[k]):
        for i in range(rows-len(data[k])):
            data[k].append([])
    else:
        pass

data
{'a0': [[1, 2, 3], []], 'a1': [[5, 6, 2], [2, 3]], 'f1': [[2, 5], []]}

После нормализации данных просто присвойте значения фрейму данных

df = pd.DataFrame()

for k,v in data.items():
df[k] = v

df
    a0          a1          f1
0   [1, 2, 3]   [5, 6, 2]   [2, 5]
1   []          [2, 3]      []

Заменить пустые списки ни с чем (также можно заменить на np.nan, et c)

for column in df.columns:
    df[column]  = df[column].apply(lambda x: '' if len(x)==0 else x)

df
    a0          a1          f1
0   [1, 2, 3]   [5, 6, 2]   [2, 5]
1               [2, 3]  
0 голосов
/ 05 апреля 2020

Вы можете использовать заполнители в своем начальном словаре.

>>> data={'a0':[[1,2,3],[]],'a1':[[5,6,2],[2,3]],'f1':[[2,5],[]]}
>>> import pandas
>>> df = pandas.DataFrame
>>> df = pandas.DataFrame()
>>> for x in data:
...     df[x]=pandas.Series(data[x],index=None)
...
>>> df
          a0         a1      f1
0  [1, 2, 3]  [5, 6, 2]  [2, 5]
1         []     [2, 3]      []
>>>

или использовать None в качестве заполнителя ...

>>> data={'a0':[[1,2,3],None],'a1':[[5,6,2],[2,3]],'f1':[[2,5],None]}
>>> for x in data:
...     df[x]=pandas.Series(data[x],index=None)
...
>>> df
          a0         a1      f1
0  [1, 2, 3]  [5, 6, 2]  [2, 5]
1       None     [2, 3]    None
>>>

Если первое имеет больше индексов, чем вторая вещь, добавленная к df pandas по умолчанию np.nan, так что это может быть наиболее разумным заполнителем в этом случае.

РЕДАКТИРОВАТЬ: Вы можете индексировать DataFrame перед добавлением любых столбцов.

>>> import pandas as pd
>>> data={'a0':[[1,2,3]],'a1':[[5,6,2],[2,3]],'f1':[[2,5]]}
>>> a = pd.DataFrame().reindex([0,1])
>>> for x in data:
...     a[x]=pd.Series(data[x],index=None)
>>> a
          a0         a1      f1
0  [1, 2, 3]  [5, 6, 2]  [2, 5]
1        NaN     [2, 3]     NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...