gpt4 book ai didi

python - .loc[索引, 列] 和 .loc[索引][列] 之间有什么区别?

转载 作者:太空宇宙 更新时间:2023-11-03 21:09:45 27 4
gpt4 key购买 nike

假设我有一个像这样的数据框,第一列“密集”,第二列“稀疏”:

# python 3.7.1, pandas 0.23.4.

import pandas as pd
df = pd.DataFrame({'col1':range(1,5), 'col2': [5, '', 7, '']})

missing_values_index = df[df['col2'] == ''].index
<小时/>

我尝试了两种方法将 col1 值分配给 col2 缺失值。

方法1(不起作用,df保持不变):

df.loc[missing_values_index]['col2'] = df.loc[missing_values_index]['col1']


<小时/>

方法 2(工作正常):

df.loc[missing_values_index, 'col2'] = df.loc[missing_values_index, 'col1']


<小时/>

我认为这只是写同一件事的两种方式。有人能解释一下这里到底发生了什么吗?

最佳答案

您提到的第二种方法“工作正常”,所以让我们谈谈为什么第一种方法不起作用!

我认为问题的核心是当我们尝试为对象的副本而不是对象本身赋值时。我可以像这样重写你的第一个方法:

something = df.loc[missing_values_index]
something['col2'] = df.loc[missing_values_index]['col1']

现在问题就显现出来了。根据documentation知道第一行创建了 View 副本。这就是为什么它会抛出 SettingWithCopy 警告并阻止您分配;因为如果 Pandas 不能确定你的作业是否有效,它就不会让你完成它!

关于python - .loc[索引, 列] 和 .loc[索引][列] 之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55149795/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com