我一直在阅读此书,但仍然觉得这个主题有些混乱:http : //pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
假设我有一个Pandas DataFrame,并且希望同时将单个列的第一行和最后一行元素设置为任何值。我可以做这个 :
df.iloc[[0, -1]].mycol = [1, 2]
这告诉我A value is trying to be set on a copy of a slice from a DataFrame.
,这是潜在的危险。
我可以.loc
改用它,但是然后我需要知道第一行和最后一行的索引(相反,.iloc
允许我按位置访问)。
什么是最安全的Pandasy方法?
为了达到这一点:
# Django queryset
query = market.stats_set.annotate(distance=F("end_date") - query_date)
# Generate a dataframe from this queryset, and order by distance
df = pd.DataFrame.from_records(query.values("distance", *fields), coerce_float=True)
df = df.sort_values("distance").reset_index(drop=True)
然后,我尝试致电df.distance.iloc[[0, -1]] = [1, 2]
。这引起了警告。
问题不在于iloc
,而是在您访问.mycol
副本时创建的。您可以在以下范围内完成所有操作iloc
:
df.iloc[[0, -1], df.columns.get_loc('mycol')] = [1, 2]
ix
如果希望基于整数和标签的混合访问,通常会使用它,但是在这种情况下将不起作用,因为-1
它实际上不在索引中,而且显然ix
不够聪明,无法知道它应该是最后一个索引。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句