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

我无法使用 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']=16


print(x.iloc[1]['x'])


nan

x['x'].iloc[1]=16


print(x.iloc[1]['x'])


16.0


MM们
浏览 262回答 2
2回答

子衿沉夜

避免链式索引如评论中所述,您的任何替代方案都不能保证有效。该文件解释的理由和理由。一个有效而另一个无效的事实不值得调查,因为这些是易于更改的实现细节。对于标量,您应该使用通过整数位置或标签iat来设置值。atiat 用于按整数位置设置标量x.iat[1, x.columns.get_loc('x')] = 16at 用于按标签设置标量x.at[x.index[1], 'x'] = 16如果您的数据帧索引是常规的pd.RangeIndex,则可以简化最后一个分配:x.at[1, 'x'] = 16

隔江千里

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 col20       1    A1       2    B2  np.nan    C3       4    D4       5    Efor i in range(len(df)):    if df['col1'].iloc[i] == "np.nan":            df['col1'].iloc[i] = 16 print(df)   col1 col20     1    A1     2    B2    16    C3     4    D4     5    E
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python