我们假设我们有一个数据框
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
实现我打算做什么的干净方法是什么?我没有使用loc的索引因为行不在df中但是
如果稍后我想回到这一行,我怎么能在追加时检索它的索引。
newrow = df.loc[0].copy() df.append(newrow) df.loc[which index to use, "A"] = 99
换句话说,让我说我想首先添加行然后稍后修改它,我怎么能得到添加的行的索引
答案 0 :(得分:2)
正如我所看到的,您修改了当前df行的每个值,因此可能无需复制当前行并获取警告。
只需使用您的值创建dict
,然后将其附加到df
:
newrow = {'A':99,'B':90,'C':92, 'D':93}
df = df.append(newrow, ignore_index=True)
使用ignore_index=True
,newrow
只是你df中的最后一个索引。
答案 1 :(得分:0)
如果您没有使用 df.iloc[-1]
提示,请使用 ignore_index = True
查找附加行。