将 Pandas 系列作为一行添加到 Pandas DataFrame

Nyx*_*nyx 7 python series dataframe python-3.x pandas

我正在尝试将 aPandas.Series作为新行添加到 a 中Pandas.DataFrame。然而,系列似乎总是被添加,其索引显示为单独的行。

我们如何将其附加为单行?

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)
Run Code Online (Sandbox Code Playgroud)
       gender  age
name              
Tom      male   10
Jane   female    7
Peter    male    9
Run Code Online (Sandbox Code Playgroud)
s = pd.Series(('Jon', 'male', 12), index=['name', 'gender', 'age'])
print(s)
Run Code Online (Sandbox Code Playgroud)
name       Jon
gender    male
age         12
dtype: object
Run Code Online (Sandbox Code Playgroud)

预期结果

       gender  age
name              
Tom      male   10
Jane   female    7
Peter    male    9
Jon      male   12
Run Code Online (Sandbox Code Playgroud)

尝试1

df2 = df.append(pd.DataFrame(s))
print(df2)
Run Code Online (Sandbox Code Playgroud)
           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
Run Code Online (Sandbox Code Playgroud)

尝试#2

df2 = pd.concat([df, s], axis=0)
print(df2)
Run Code Online (Sandbox Code Playgroud)
           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
Run Code Online (Sandbox Code Playgroud)

尝试#3

df2 = pd.concat([df, pd.DataFrame(s)], axis=0)
print(df2)
Run Code Online (Sandbox Code Playgroud)
           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
Run Code Online (Sandbox Code Playgroud)

Ale*_*der 8

这“有效”,但您可能需要重新考虑如何构建数据框。如果追加数据,请一次性完成所有操作,而不是逐行执行。

>>> 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
Run Code Online (Sandbox Code Playgroud)

作为数据框的一列,系列通常都是相同的数据类型(例如age)。在这种情况下,您的系列代表给定记录的单行数据,例如数据库中可能具有混合类型的行。您可能想将您的系列视为数据框行。

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])
Run Code Online (Sandbox Code Playgroud)