将列表作为带有索引的新行追加到pandas DataFrame [英] Append list to pandas DataFrame as new row with index

查看:566
本文介绍了将列表作为带有索引的新行追加到pandas DataFrame的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

Despite of the numerous stack overflow questions on appending data to a dataframe I could not really find an answer to the following. I am looking for a straight forward solution to append a list as last row of a dataframe. Imagine I have a simple dataframe:

 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

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

After some operations I get the following list:

listtwo=[4,5,6]

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

I want to append it at the end of the dataframe. I change that list into a series:

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

我想要

我也尝试过:

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

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

what I am looking for is a) how can I add a list to a particular index name b) how can I simple add a row of values out of a list even if I don't have a name for index (leave it empty)

推荐答案

都可以用 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 对象:

Or, use df.append with the second argument being a Series object having appropriate index and name:

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递增之后。


If you are appending to a DataFrame without an index (i.e., having a numeric index), you can use loc after finding the max of the index and incrementing by 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

或者使用 ignore_index = True 追加

Or, using append with 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

这篇关于将列表作为带有索引的新行追加到pandas DataFrame的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆