Convert pandas Series to DataFrame

前端 未结 6 889
长情又很酷
长情又很酷 2020-11-27 11:08

I have a Pandas series sf:

email
email1@email.com    [1.0, 0.0, 0.0]
email2@email.com    [2.0, 0.0, 0.0]
email3@email.com    [1.0, 0.0, 0.0]
email4@email.com         


        
相关标签:
6条回答
  • 2020-11-27 11:37

    to_frame():

    Starting with the following Series, df:

    email
    email1@email.com    A
    email2@email.com    B
    email3@email.com    C
    dtype: int64
    

    I use to_frame to convert the series to DataFrame:

    df = df.to_frame().reset_index()
    
        email               0
    0   email1@email.com    A
    1   email2@email.com    B
    2   email3@email.com    C
    3   email4@email.com    D
    

    Now all you need is to rename the column name and name the index column:

    df = df.rename(columns= {0: 'list'})
    df.index.name = 'index'
    

    Your DataFrame is ready for further analysis.

    Update: I just came across this link where the answers are surprisingly similar to mine here.

    0 讨论(0)
  • 2020-11-27 11:39

    Rather than create 2 temporary dfs you can just pass these as params within a dict using the DataFrame constructor:

    pd.DataFrame({'email':sf.index, 'list':sf.values})
    

    There are lots of ways to construct a df, see the docs

    0 讨论(0)
  • 2020-11-27 11:41

    Series.reset_index with name argument

    Often the use case comes up where a Series needs to be promoted to a DataFrame. But if the Series has no name, then reset_index will result in something like,

    s = pd.Series([1, 2, 3], index=['a', 'b', 'c']).rename_axis('A')
    s
    
    A
    a    1
    b    2
    c    3
    dtype: int64
    

    s.reset_index()
    
       A  0
    0  a  1
    1  b  2
    2  c  3
    

    Where you see the column name is "0". We can fix this be specifying a name parameter.

    s.reset_index(name='B')
    
       A  B
    0  a  1
    1  b  2
    2  c  3
    

    s.reset_index(name='list')
    
       A  list
    0  a     1
    1  b     2
    2  c     3
    

    Series.to_frame

    If you want to create a DataFrame without promoting the index to a column, use Series.to_frame, as suggested in this answer. This also supports a name parameter.

    s.to_frame(name='B')
    
       B
    A   
    a  1
    b  2
    c  3
    

    pd.DataFrame Constructor

    You can also do the same thing as Series.to_frame by specifying a columns param:

    pd.DataFrame(s, columns=['B'])
    
       B
    A   
    a  1
    b  2
    c  3
    
    0 讨论(0)
  • 2020-11-27 11:47

    Series.to_frame can be used to convert a Series to DataFrame.

    # The provided name (columnName) will substitute the series name
    df = series.to_frame('columnName')
    

    For example,

    s = pd.Series(["a", "b", "c"], name="vals")
    df = s.to_frame('newCol')
    print(df)
    
       newCol
    0    a
    1    b
    2    c
    
    0 讨论(0)
  • 2020-11-27 11:49

    One line answer would be

    myseries.to_frame(name='my_column_name')
    

    Or

    myseries.reset_index(drop=True, inplace=True)  # As needed
    
    0 讨论(0)
  • 2020-11-27 11:50

    probably graded as a non-pythonic way to do this but this'll give the result you want in a line:

    new_df = pd.DataFrame(zip(email,list))
    

    Result:

                   email               list
    0   email1@email.com    [1.0, 0.0, 0.0]
    1   email2@email.com    [2.0, 0.0, 0.0]
    2   email3@email.com    [1.0, 0.0, 0.0]
    3   email4@email.com    [4.0, 0.0, 3.0]
    4   email5@email.com    [1.0, 5.0, 0.0]
    
    0 讨论(0)
提交回复
热议问题