将行的修改副本添加到数据框中

时间:2017-11-28 11:32:45

标签: python python-3.x dataframe indexing append

我们假设我们有一个数据框

df = pd.DataFrame(numpy.random.randint(0,5,size=(5, 4)), columns=list('ABCD'))
df
   A  B  C  D
0  3  3  0  0
1  0  3  3  2
2  1  0  0  0
3  2  4  4  0
4  3  2  2  4

我想从现有数据中添加一个新行并修改几列

newrow = df.loc[0].copy()
newrow.A = 99
newrow.B = 90
df.append(newrow)

通过这样做,我在尝试修改行时收到警告

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
<string>:23: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
  1. 实现我打算做什么的干净方法是什么?我没有使用loc的索引因为行不在df中但是

  2. 如果稍后我想回到这一行,我怎么能在追加时检索它的索引。

  3. newrow = df.loc[0].copy()
    df.append(newrow)
    df.loc[which index to use, "A"] = 99
    

    换句话说,让我说我想首先添加行然后稍后修改它,我怎么能得到添加的行的索引

2 个答案:

答案 0 :(得分:2)

正如我所看到的,您修改了当前df行的每个值,因此可能无需复制当前行并获取警告。

只需使用您的值创建dict,然后将其附加到df

newrow = {'A':99,'B':90,'C':92, 'D':93}
df = df.append(newrow, ignore_index=True)

使用ignore_index=Truenewrow只是你df中的最后一个索引。

答案 1 :(得分:0)

如果您没有使用 df.iloc[-1] 提示,请使用 ignore_index = True 查找附加行。