【发布时间】:2020-11-26 19:16:36
【问题描述】:
我有一个包含各种列的数据框。我想检查每一行是否满足条件。条件来自另一个 CSV 文件,但在这里我提供一个简化示例来说明我的问题:
条件是价格低于26000。
cars = {'Brand': ['Honda Civic','Toyota Corolla','Ford Focus','Audi A4'],
'Price': [22000,25000,27000,35000]
}
mydata = pd.DataFrame(cars, columns = ['Brand','Price'], index=['Car_1','Car_2','Car_3','Car_4'])
数据如下所示:
print (df)
Brand Price
Car_1 Honda Civic 22000
Car_2 Toyota Corolla 25000
Car_3 Ford Focus 27000
Car_4 Audi A4 35000
因此,我使用np.nan 创建了另一列,并在for 循环中检查该行是否满足该条件,如果是,则将True 的值赋予该单元格。
mydata['condition'] = np.nan
Brand Price condition
Car_1 Honda Civic 22000 NaN
Car_2 Toyota Corolla 25000 NaN
Car_3 Ford Focus 27000 NaN
Car_4 Audi A4 35000 NaN
我的前循环是这样的:
for i in range(mydata.shape[0]):
mydata.condition.iloc[i] = None
if (mydata.Price.iloc[i] <= 26000):
mydata.condition.iloc[i] = True
现在,mydata 看起来像这样:
Brand Price condition
Car_1 Honda Civic 22000 True
Car_2 Toyota Corolla 25000 True
Car_3 Ford Focus 27000 None
Car_4 Audi A4 35000 None
如果我使用dropna()
我会得到我想要的结果:
filtered_results=mydata.dropna()
Brand Price condition
Car_1 Honda Civic 22000 True
Car_2 Toyota Corolla 25000 True
我的问题是我收到警告,如下所示:
SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
iloc._setitem_with_indexer(indexer, value)
我的问题是,在这一行中为数据框分配值以避免上述错误的正确/有效方法是什么:
mydata.condition.iloc[i] = True
感谢您的帮助。
【问题讨论】:
标签: python python-3.x pandas dataframe for-loop