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)即使我没有索引名称,如何简单地从列表中添加一行值(将其保留为空)
可以就地分配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)