使用loc和iloc进行pandas分配时会弹出加密警告

时间:2015-02-26 06:08:32

标签: python numpy pandas loc

我的代码中有一条声明:

df.loc[i] = [df.iloc[0][0], i, np.nan]

其中i是我在此语句所在的for循环中使用的迭代变量,np是我导入的numpy模块,而df是一个DataFrame看起来像:

   build_number   name  cycles
0           390  adpcm   21598
1           390    aes    5441
2           390  dfadd     463
3           390  dfdiv    1323
4           390  dfmul     167
5           390  dfsin   39589
6           390    gsm    6417
7           390   mips    4205
8           390  mpeg2    1993
9           390    sha  348417

正如您所看到的,我的代码中的语句用于在我的DataFrame df中插入新行,并使用{{填充cycles下的最后一列(在新插入的行内) 1}}值。

然而,在这样做时,我收到以下警告信息:

NaN

查看文档,我仍然不明白我在这里遇到的问题或风险是什么。我认为使用/usr/local/bin/ipython:28: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy loc已遵循建议吗?

谢谢。

在这里编辑 在@EdChum的请求下,我添加了使用以下语句的函数:

iloc

1 个答案:

答案 0 :(得分:0)

如果您只是想设置“周期”列,那么如果您不知道如何执行此操作,则以下内容可以正常工作而不会发出任何警告:

In [344]:

for i in range(len(df)):
    df.loc[i,'cycles'] = np.nan
df
Out[344]:
   build_number   name  cycles
0           390  adpcm     NaN
1           390    aes     NaN
2           390  dfadd     NaN
3           390  dfdiv     NaN
4           390  dfmul     NaN
5           390  dfsin     NaN
6           390    gsm     NaN
7           390   mips     NaN
8           390  mpeg2     NaN
9           390    sha     NaN

如果您只想设置整个列,则无需循环执行此操作:df['cycles'] = np.NaN