简体   繁体   中英

Add Pandas Series as a Row to Pandas DataFrame

I am trying to add a Pandas.Series as a new row to a Pandas.DataFrame . However, the Series always appear to be added with its index appearing as individual rows.

How can we append it as a single row?

import pandas as pd

df = pd.DataFrame([
    ('Tom', 'male', 10),
    ('Jane', 'female', 7),
    ('Peter', 'male', 9),
], columns=['name', 'gender', 'age'])
df.set_index(['name'], inplace=True)
print(df)
       gender  age
name              
Tom      male   10
Jane   female    7
Peter    male    9
s = pd.Series(('Jon', 'male', 12), index=['name', 'gender', 'age'])
print(s)
name       Jon
gender    male
age         12
dtype: object

Expected Result

       gender  age
name              
Tom      male   10
Jane   female    7
Peter    male    9
Jon      male   12

Attempt 1

df2 = df.append(pd.DataFrame(s))
print(df2)
           0   age  gender
Tom      NaN  10.0    male
Jane     NaN   7.0  female
Peter    NaN   9.0    male
name     Jon   NaN     NaN
gender  male   NaN     NaN
age       12   NaN     NaN

Attempt #2

df2 = pd.concat([df, s], axis=0)
print(df2)
           0   age  gender
Tom      NaN  10.0    male
Jane     NaN   7.0  female
Peter    NaN   9.0    male
name     Jon   NaN     NaN
gender  male   NaN     NaN
age       12   NaN     NaN

Attempt #3

df2 = pd.concat([df, pd.DataFrame(s)], axis=0)
print(df2)
           0   age  gender
Tom      NaN  10.0    male
Jane     NaN   7.0  female
Peter    NaN   9.0    male
name     Jon   NaN     NaN
gender  male   NaN     NaN
age       12   NaN     NaN

This "works", but you may want to reconsider how you are building your dataframes in the first place. If you append data, do it all at once instead of row by row.

>>> pd.concat([df, s.to_frame().T.set_index('name')])
       gender age
name             
Tom      male  10
Jane   female   7
Peter    male   9
Jon      male  12

As a column of a dataframe, a Series is generally all the same data type (eg age ). In this case, your series represents a single row of data for a given record, eg a row in a database with potentially mixed types. You may want to consider your series as a dataframe row instead.

row = pd.DataFrame({'gender': 'male', 'age': 12}, 
                   index=pd.Index(['Jon'], name='name'))
>>> pd.concat([df, row])
       gender  age
name              
Tom      male   10
Jane   female    7
Peter    male    9
Jon      male   12
>>> pd.concat([df, row])

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM