Добавление строк в пустой DataFrame не работает - PullRequest
0 голосов
/ 20 мая 2018

У меня есть фрагмент кода Python, который по существу сводится к следующему:

import pandas as pd

months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
l = [1607.8, 1688.17, 1605.66, 1469.03, 1312.65, 1451.74, 1445.26, 1350.94, 1371.27, 1201.6, 1240.59, 1291.43]

# First, construct a empty DataFrame.
df = pd.DataFrame(columns = months, dtype=float)

# Then, keep adding rows to DataFrame given by list l.
df.append([l])

print df

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

      Jan      Feb      Mar      Apr      May      Jun      Jul      Aug  \
0  1607.8  1688.17  1605.66  1469.03  1312.65  1451.74  1445.26  1350.94   

       Sep     Oct      Nov      Dec  
0  1371.27  1201.6  1240.59  1291.43  

Однако я получаю следующее:

Empty DataFrame
Columns: [Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec]
Index: []

Если я заменю df.append([l]) на следующее, у меня все будет хорошо.

df = pd.DataFrame([l], columns = months)
df.columns = months

Что я делаю не так?

Ответы [ 4 ]

0 голосов
/ 20 мая 2018

Если порядок столбцов не имеет значения, вы можете просто использовать эту строку:

df = pd.DataFrame(dict(zip(months,l)),index=[0])

Вывод:

Apr      Aug      Dec      Feb     Jan      Jul      Jun      Mar  \
0  1469.03  1350.94  1291.43  1688.17  1607.8  1445.26  1451.74  1605.66   

       May      Nov     Oct      Sep  
0  1312.65  1240.59  1201.6  1371.27

Если вы хотите упорядочить столбцы попорядок месяцев, затем просто добавьте эту строку после построения фрейма данных:

df = df[months]

Вывод:

Jan      Feb      Mar      Apr      May      Jun      Jul      Aug  \
0  1607.8  1688.17  1605.66  1469.03  1312.65  1451.74  1445.26  1350.94   

       Sep     Oct      Nov      Dec  
0  1371.27  1201.6  1240.59  1291.43 
0 голосов
/ 20 мая 2018

Самый простой способ:

   df= pd.DataFrame(l).T
   df.columns=months
0 голосов
/ 20 мая 2018

Для построения кадра данных с уже имеющимися данными l это, вероятно, лучше всего:

pd.DataFrame([l], columns=months)

Для добавления строки в существующий кадр данных с помощью метода append это работает:

df.append(pd.DataFrame([l], columns=months))

Для добавления строки в целом, предложение, сделанное jpp , вероятно, является наилучшим.

0 голосов
/ 20 мая 2018

Вы должны использовать pd.DataFrame.loc, чтобы добавить строку, заданную списком l:

df.loc[len(df.index)+1] = l

Метод pd.DataFrame.append используется для добавленияодин фрейм данных или другой добавляемый объект к существующему фрейму данных:

DataFrame.append ( другой, ignore_index = False, verify_integrity = False, sort = None )

Добавлять строки конца другого в конец этого кадра


Однако более эффективно сформировать список списков, а затем вызвать pd.DataFrame.append только один раз.

list_of_lists = []

for item in some_iterable:
    l = foo(item)
    list_of_lists.append(l)

df = df.append(pd.DataFrame(list_of_lists, columns=df.columns))

Причина в том, что list.append дешевле, чем pd.DataFrame.loc назначение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...