Is it possible to add several columns at once to a pandas DataFrame?

后端 未结 4 1710
走了就别回头了
走了就别回头了 2020-12-01 13:55

If I want to create a new DataFrame with several columns, I can add all the columns at once -- for example, as follows:

data = {\'col_1\': [0, 1, 2, 3],
             


        
相关标签:
4条回答
  • 2020-12-01 14:38

    Pandas has assign method since 0.16.0. You could use it on dataframes like

    In [1506]: df1.assign(**df2)
    Out[1506]:
       col_1  col_2  col_3  col_4
    0      0      4      8     12
    1      1      5      9     13
    2      2      6     10     14
    3      3      7     11     15
    

    or, you could directly use the dictionary like

    In [1507]: df1.assign(**additional_data)
    Out[1507]:
       col_1  col_2  col_3  col_4
    0      0      4      8     12
    1      1      5      9     13
    2      2      6     10     14
    3      3      7     11     15
    
    0 讨论(0)
  • 2020-12-01 14:42

    All you need to do is create the new columns with data from the additional dataframe.

    data =            {'col_1': [0, 1, 2, 3],
                       'col_2': [4, 5, 6, 7]}
    additional_data = {'col_3': [8, 9, 10, 11],
                       'col_4': [12, 13, 14, 15]}
    df = pd.DataFrame(data)
    df2 = pd.DataFrame(additional_data)
    
    df[df2.columns] = df2
    

    df now looks like:

       col_1  col_2  col_3  col_4
    0      0      4      8     12
    1      1      5      9     13
    2      2      6     10     14
    3      3      7     11     15
    

    Indices from the original dataframe will be used as if you had performed an in-place left join. Data from the original dataframe in columns with a matching name in the additional dataframe will be overwritten. For example:

    data =            {'col_1': [0, 1, 2, 3],
                       'col_2': [4, 5, 6, 7]}
    additional_data = {'col_2': [8, 9, 10, 11],
                       'col_3': [12, 13, 14, 15]}
    df = pd.DataFrame(data)
    df2 = pd.DataFrame(additional_data, index=[0,1,2,4])
    
    df[df2.columns] = df2
    

    df now looks like:

       col_1  col_2  col_3
    0      0      8     12
    1      1      9     13
    2      2     10     14
    3      3    NaN    NaN
    
    0 讨论(0)
  • 2020-12-01 14:51

    If you don't want to create new DataFrame from additional_data, you can use something like this:

    >>> additional_data = [[8, 9, 10, 11], [12, 13, 14, 15]]
    >>> df['col3'], df['col4'] = additional_data
    >>> df
       col_1  col_2  col3  col4
    0      0      4     8    12
    1      1      5     9    13
    2      2      6    10    14
    3      3      7    11    15
    

    It's also possible to do something like this, but it would be new DataFrame, not inplace modification of existing DataFrame:

    >>> additional_header = ['col_3', 'col_4']
    >>> additional_data = [[8, 9, 10, 11], [12, 13, 14, 15]]
    >>> df = pd.DataFrame(data=np.concatenate((df.values.T, additional_data)).T, columns=np.concatenate((df.columns, additional_header)))
    >>> df
       col_1  col_2  col_3  col_4
    0      0      4      8     12
    1      1      5      9     13
    2      2      6     10     14
    3      3      7     11     15
    
    0 讨论(0)
  • 2020-12-01 15:00

    What you need is the join function:

    df1.join(df2, how='outer')
    #or
    df1.join(df2) # this works also
    

    Example:

    data = {'col_1': [0, 1, 2, 3],
        'col_2': [4, 5, 6, 7]}
    df1 = pd.DataFrame(data)
    
    additional_data = {'col_3': [8, 9, 10, 11],
                   'col_4': [12, 13, 14, 15]}
    df2 = pd.DataFrame(additional_data)
    
    df1.join(df2, how='outer')
    

    output:

       col_1  col_2  col_3  col_4
    0      0      4      8     12
    1      1      5      9     13
    2      2      6     10     14
    3      3      7     11     15
    
    0 讨论(0)
提交回复
热议问题