одновременное добавление нескольких колонок к пандам

Я новичок в pandas и пытаюсь понять, как добавить несколько столбцов в pandas одновременно. Любая помощь здесь ценится. В идеале я хотел бы сделать это за один шаг, а не несколько повторных шагов …

import pandas as pd df = {'col_1': [0, 1, 2, 3], 'col_2': [4, 5, 6, 7]} df = pd.DataFrame(df) df[[ 'column_new_1', 'column_new_2','column_new_3']] = [np.nan, 'dogs',3] #thought this would work here... 

  • Я продолжаю получать ошибку типа
  • Python BeautifulSoup XML Parsing
  • TemplateDoesNotExist в python app-engine django 1.2, в то время как шаблоны, отображающие относительные пути
  • Раскрашивание краев сети по весу
  • Python. Торнадо. Неблокирующий клиент xmlrpc
  • python: конвертировать числовые данные в pandas dataframe в float в присутствии строк
  • Как я могу защитить свой идентификатор доступа AWS и секретный ключ в моем приложении python
  • Virtualenv и контроль версий версий
  • 4 Solutions collect form web for “одновременное добавление нескольких колонок к пандам”

    Я согласен, я бы ожидал, что ваш оригинальный синтаксис будет работать (раньше я сталкивался с этой проблемой). Я думаю, что это не работает, потому что неоднозначно, как ваши новые данные должны быть воспроизведены в вашем массиве (т. df Если df равно 3×3, должен ли список значений копироваться во все строки или все столбцы?).

    Вот несколько подходов, которые работают:

     import pandas as pd import numpy as np df = pd.DataFrame({ 'col_1': [0, 1, 2, 3], 'col_2': [4, 5, 6, 7] }) 

    Затем одно из следующего:

    (1) Технически это три шага, но это выглядит как один шаг:

     df['column_new_1'], df['column_new_2'], df['column_new_3'] = [np.nan, 'dogs', 3] 

    (2) Я бы не ожидал, что DataFrame будет работать таким образом, но это

     df[['column_new_1', 'column_new_2', 'column_new_3']] = pd.DataFrame([[np.nan, 'dogs', 3]], index=df.index) 

    (3) немного более предсказуемым, чем предыдущий; будет работать хорошо, если вы создадите кадр данных с новыми столбцами, а затем объедините с исходным фреймом данных позже:

     df = pd.concat( [ df, pd.DataFrame( [[np.nan, 'dogs', 3]], index=df.index, columns=['column_new_1', 'column_new_2', 'column_new_3'] ) ], axis=1 ) 

    (4) Как и предыдущий, но используя join вместо concat (может быть менее эффективным):

     df = df.join(pd.DataFrame( [[np.nan, 'dogs', 3]], index=df.index, columns=['column_new_1', 'column_new_2', 'column_new_3'] )) 

    (5) Это более «естественный» способ создать новый кадр данных, чем предыдущие, но новые столбцы будут отсортированы в алфавитном порядке:

     df = df.join(pd.DataFrame( { 'column_new_1': np.nan, 'column_new_2': 'dogs', 'column_new_3': 3 }, index=df.index )) 

    С использованием concat :

     In [128]: df Out[128]: col_1 col_2 0 0 4 1 1 5 2 2 6 3 3 7 In [129]: pd.concat([df, pd.DataFrame(columns = [ 'column_new_1', 'column_new_2','column_new_3'])]) Out[129]: col_1 col_2 column_new_1 column_new_2 column_new_3 0 0.0 4.0 NaN NaN NaN 1 1.0 5.0 NaN NaN NaN 2 2.0 6.0 NaN NaN NaN 3 3.0 7.0 NaN NaN NaN 

    Не очень уверен в том, что вы хотели сделать с [np.nan, 'dogs',3] . Может быть, теперь задайте их как значения по умолчанию?

     In [142]: df1 = pd.concat([df, pd.DataFrame(columns = [ 'column_new_1', 'column_new_2','column_new_3'])]) In [143]: df1[[ 'column_new_1', 'column_new_2','column_new_3']] = [np.nan, 'dogs', 3] In [144]: df1 Out[144]: col_1 col_2 column_new_1 column_new_2 column_new_3 0 0.0 4.0 NaN dogs 3 1 1.0 5.0 NaN dogs 3 2 2.0 6.0 NaN dogs 3 3 3.0 7.0 NaN dogs 3 

    использование понимания списка, pd.DataFrame и pd.concat

     pd.concat( [ df, pd.DataFrame( [[np.nan, 'dogs', 3] for _ in range(df.shape[0])], df.index, ['column_new_1', 'column_new_2','column_new_3'] ) ], axis=1) 

    введите описание изображения здесь

    Просто хочу указать, что option2 в ответе @Matthias Fripp

    (2) Я бы не ожидал, что DataFrame будет работать таким образом, но это

    df [['column_new_1', 'column_new_2', 'column_new_3']] = pd.DataFrame ([[np.nan, 'dogs, 3]], index = df.index)

    уже задокументирована в собственной документации pandas http://pandas.pydata.org/pandas-docs/stable/indexing.html#basics

    Вы можете передать список столбцов в [], чтобы выбрать столбцы в этом порядке. Если столбец не содержится в DataFrame, будет создано исключение. Таким же образом можно установить несколько столбцов. Вы можете найти это полезным для применения преобразования ( на месте ) к подмножеству столбцов.

    Python - лучший язык программирования в мире.