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

2024-04-25 10:25:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我不能改变np.nan公司使用x.iloc[1]['x']=16将其更改为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

Tags: dataframenp公司nanpdprint区别iloc
2条回答

避免链式索引

正如评论中提到的,你的两个选择都不能保证有效。这个documentation解释了推理和基本原理。你知道吗

一个有效,另一个无效的事实是不值得调查的,因为这些都是可能改变的实现细节。你知道吗

对于标量,应该使用iat按整数位置设置值或按标签设置值at。你知道吗

^{}用于整数位置的标量设置

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

^{}对于标量设置,按标签

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

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

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

欢迎使用Stackoverflow 评论中提供的答案是明确和充分的。你知道吗

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

相关问题 更多 >

    热门问题