Appending a list or series to a pandas DataFrame as a row?

后端 未结 12 1953
一向
一向 2020-12-02 05:22

So I have initialized an empty pandas DataFrame and I would like to iteratively append lists (or Series) as rows in this DataFrame. What is the best way of doing this?

相关标签:
12条回答
  • 2020-12-02 05:26

    As mentioned here - https://kite.com/python/answers/how-to-append-a-list-as-a-row-to-a-pandas-dataframe-in-python, you'll need to first convert the list to a series then append the series to dataframe.

    df = pd.DataFrame([[1, 2], [3, 4]], columns = ["a", "b"])
    to_append = [5, 6]
    a_series = pd.Series(to_append, index = df.columns)
    df = df.append(a_series, ignore_index=True)
    
    0 讨论(0)
  • 2020-12-02 05:31

    Converting the list to a data frame within the append function works, also when applied in a loop

    import pandas as pd
    mylist = [1,2,3]
    df = pd.DataFrame()
    df = df.append(pd.DataFrame(data[mylist]))
    
    0 讨论(0)
  • 2020-12-02 05:34
    df = pd.DataFrame(columns=list("ABC"))
    df.loc[len(df)] = [1,2,3]
    
    0 讨论(0)
  • 2020-12-02 05:37

    Sometimes it's easier to do all the appending outside of pandas, then, just create the DataFrame in one shot.

    >>> import pandas as pd
    >>> simple_list=[['a','b']]
    >>> simple_list.append(['e','f'])
    >>> df=pd.DataFrame(simple_list,columns=['col1','col2'])
       col1 col2
    0    a    b
    1    e    f
    
    0 讨论(0)
  • 2020-12-02 05:37

    Here's a function that, given an already created dataframe, will append a list as a new row. This should probably have error catchers thrown in, but if you know exactly what you're adding then it shouldn't be an issue.

    import pandas as pd
    import numpy as np
    
    def addRow(df,ls):
        """
        Given a dataframe and a list, append the list as a new row to the dataframe.
    
        :param df: <DataFrame> The original dataframe
        :param ls: <list> The new row to be added
        :return: <DataFrame> The dataframe with the newly appended row
        """
    
        numEl = len(ls)
    
        newRow = pd.DataFrame(np.array(ls).reshape(1,numEl), columns = list(df.columns))
    
        df = df.append(newRow, ignore_index=True)
    
        return df
    
    0 讨论(0)
  • 2020-12-02 05:38

    Could you do something like this?

    >>> import pandas as pd
    >>> df = pd.DataFrame(columns=['col1', 'col2'])
    >>> df = df.append(pd.Series(['a', 'b'], index=['col1','col2']), ignore_index=True)
    >>> df = df.append(pd.Series(['d', 'e'], index=['col1','col2']), ignore_index=True) 
    >>> df
      col1 col2
    0    a    b
    1    d    e
    

    Does anyone have a more elegant solution?

    0 讨论(0)
提交回复
热议问题