Добавить список к пандам DataFrame как новую строку с индексом - PullRequest
0 голосов
/ 25 декабря 2018

Несмотря на многочисленные вопросы о переполнении стека при добавлении данных в фрейм данных, я не смог найти ответ на следующий вопрос.Я ищу прямое решение, чтобы добавить список в качестве последней строки в кадре данных.Представьте, что у меня есть простой фрейм данных:

 indexlist=['one']
 columnList=list('ABC')
 values=np.array([1,2,3])
 # take care, the values array is a 3x1 size array. 
 # row has to be 1x3 so we have to reshape it

values=values.reshape(1,3)
df3=pd.DataFrame(values,index=indexlist,columns=columnList)
print(df3)

     A  B  C
one  1  2  3

После некоторых операций я получаю следующий список:

listtwo=[4,5,6]

Я хочу добавить его в конец фрейма данных.Я изменяю этот список на серию:

oseries=pd.Series(listtwo)
print(type(oseries))
oseries.name="two"

сейчас, это не работает:

df3.append(oseries)

, поскольку он дает:

A   B   C   0   1   2
one 1.0 2.0 3.0 NaN NaN NaN
two NaN NaN NaN 5.0 6.0 7.0

Я хотел быимеют значения в полях AB и C.

Я также пытался:

df3.append(oseries, columns=list('ABC'))  *** not working ***
df3.append(oseries, ignore_index=True)  *** working but wrong result
df3.append(oseries, ignore_index=False) *** working but wrong result

df3.loc[oseries.name]=oseries adds a row with NaN values

, что я ищу, это: а) как добавить список к определенному имени индекса б) как можноЯ просто добавляю строку значений из списка, даже если у меня нет имени для индекса (оставьте его пустым)

1 Ответ

0 голосов
/ 25 декабря 2018

Либо назначьте на месте с помощью loc:

df.loc['two'] = [4, 5, 6]
# df.loc['two', :] = [4, 5, 6]
df
     A  B  C
one  1  2  3
two  4  5  6

Или используйте df.append со вторым аргументом, являющимся Series объектом, имеющим соответствующий индекс и имя:

s = pd.Series(dict(zip(df.columns, [4, 5, 6])).rename('two'))
df2 = df.append(s)

df2
     A  B  C
one  1  2  3
two  4  5  6

Если вы добавляете в DataFrame без индекса (то есть с числовым индексом), вы можете использовать loc после нахождения максимума индекса и увеличения на 1:

df4 = pd.DataFrame(np.array([1,2,3]).reshape(1,3), columns=list('ABC'))
df4

   A  B  C
0  1  2  3

df4.loc[df4.index.max() + 1, :] = [4, 5, 6]
df4
     A    B    C
0  1.0  2.0  3.0
1  4.0  5.0  6.0

Или, используя append с ignore_index=True:

df4.append(pd.Series(dict(zip(df4.columns, [4, 5, 6]))), ignore_index=True)

   A  B  C
0  1  2  3
1  4  5  6
...