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

时间:2018-12-25 13:56:39

标签: python pandas dataframe append series

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

 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

我想要A B和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

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

2 个答案:

答案 0 :(得分:3)

要么用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(即具有数字索引),则可以在找到索引的最大值并以1递增后使用loc

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

或者将appendignore_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

答案 1 :(得分:0)

没有索引

field: asc|desc

附索引

        String uri = UriComponentsBuilder.fromUriString(BASE_PATH)
            .queryParam("page", pageable.getOffset())
            .queryParam("size", pageable.getPageSize())
            .queryParam("sort", pageable.getSort()) <-- field: ASC
            .buildAndExpand(userId, profileId)
            .toUriString();
    return restTemplate.exchange(uri, HttpMethod.GET, null, String.class).getBody();