为了账号安全,请及时绑定邮箱和手机立即绑定

x.iloc[1]['x'] 和 x['x'].iloc[1] 有什么区别

x.iloc[1]['x'] 和 x['x'].iloc[1] 有什么区别

MM们 2021-10-12 15:01:31
我无法使用 x.iloc[1]['x']=16 将 np.nan 的值更改为 16,但我可以使用 x['x'].iloc[1]=16 更改它。为什么?这两个表达式之间有什么区别?x = pd.DataFrame({'x': [1, np.nan, 3], 'y': [3, 4, 5]})x.iloc[1]['x']=16print(x.iloc[1]['x'])nanx['x'].iloc[1]=16print(x.iloc[1]['x'])16.0
查看完整描述

2 回答

?
子衿沉夜

TA贡献1828条经验 获得超3个赞

避免链式索引

如评论中所述,您的任何替代方案都不能保证有效。该文件解释的理由和理由。

一个有效而另一个无效的事实不值得调查,因为这些是易于更改的实现细节。

对于标量,您应该使用通过整数位置标签iat来设置值。at

iat 用于按整数位置设置标量

x.iat[1, x.columns.get_loc('x')] = 16

at 用于按标签设置标量

x.at[x.index[1], 'x'] = 16

如果您的数据帧索引是常规的pd.RangeIndex,则可以简化最后一个分配:

x.at[1, 'x'] = 16


查看完整回答
反对 回复 2021-10-12
?
隔江千里

TA贡献1906条经验 获得超10个赞

iloc 是一个很棒的工具,如果您想以自己想要的方式使用它,我会补充说,您必须首先传递要选择行的列。在数据帧上循环以更改值的示例:


import pandas as pd 


d = {'col1': [1, 2,'np.nan',4,5], 'col2': ['A','B','C','D','E']}

df = pd.DataFrame(data=d)


     col1 col2

0       1    A

1       2    B

2  np.nan    C

3       4    D

4       5    E



for i in range(len(df)):

    if df['col1'].iloc[i] == "np.nan":

            df['col1'].iloc[i] = 16 


print(df)

   col1 col2

0     1    A

1     2    B

2    16    C

3     4    D

4     5    E


查看完整回答
反对 回复 2021-10-12
  • 2 回答
  • 0 关注
  • 261 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信