Добавить серию Pandas в качестве ряда в DataFrame Pandas - PullRequest
1 голос
/ 08 ноября 2019

Я пытаюсь добавить Pandas.Series в качестве новой строки к 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)
       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

Ожидаемый результат

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

Попытка 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

Попытка # 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

Попытка # 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

1 Ответ

2 голосов
/ 08 ноября 2019

Это "работает", но вы, возможно, захотите пересмотреть то, как вы строите свои кадры данных в первую очередь. Если вы добавляете данные, делайте все сразу, а не по строкам.

>>> 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

В качестве столбца кадра данных, как правило, все серии имеют один и тот же тип данных (например, 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])
...