将列表作为带有索引的新行追加到pandas DataFrame

Ber*_*nes 2 python append series dataframe pandas

尽管有很多关于将数据追加到数据帧的堆栈溢出问题,但我确实无法找到以下答案。我正在寻找一个简单的解决方案,以将列表追加为数据框的最后一行。想象一下,我有一个简单的数据框:

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

经过一些操作后,我得到以下列表:

listtwo=[4,5,6]
Run Code Online (Sandbox Code Playgroud)

我想将其附加在数据框的末尾。我将该列表更改为一系列:

oseries=pd.Series(listtwo)
print(type(oseries))
oseries.name="two"
Run Code Online (Sandbox Code Playgroud)

现在,这不起作用:

df3.append(oseries)
Run Code Online (Sandbox Code Playgroud)

因为它给出:

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

我想拥有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
Run Code Online (Sandbox Code Playgroud)

我正在寻找的是a)如何将列表添加到特定的索引名称b)即使我没有索引名称,如何简单地从列表中添加一行值(将其保留为空)

cs9*_*s95 5

可以就地分配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
Run Code Online (Sandbox Code Playgroud)

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

如果要追加到不带索引的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
Run Code Online (Sandbox Code Playgroud)

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