这更像是一个新手python问题。我有一个pandas数据帧tmp_df
,我使用3个日期时间输入进行切片,如下所示,以提取不同的数据时间范围:
tmp_daily_df = tmp_df.loc[idx[daily[1]:daily[2]],:]
tmp_weekly_df = tmp_df.loc[idx[weekly[1]: weekly[2]],:]
tmp_monthly_df = tmp_df.loc[idx[monthly[1]: monthly[2]],:]
然后我将生成的3个数据帧传递给一个名为compute_stats()
的函数,该函数计算各种统计信息并对输入数据帧执行一些操作(即tmp_daily_df
)。其中一个操作是向tmp_daily_df
等添加几个新列。
final_daily_df = compute_stats(tmp_daily_df, 'M','').reset_index(drop=True)
final_weekly_df = compute_stats(tmp_weekly_df, 'M','').reset_index(drop=True)
final_monthly_df = compute_stats(tmp_monthly_df, 'M','').reset_index(drop=True)
我的问题是因为python变量赋值更像是一个链接而不是副本我想知道第二次和第三次对compute_stats的调用是否被tmp_daily_df操作损坏,tmp_daily_df是tmp_df的时间片,由tmp_weekly_df引用并且tmp_monthly_df。
答案 0 :(得分:1)
切片列表会创建一个副本,换句话说:
new_list = l[:]
相当于:
new_list = list(l)
DataFrames的工作方式略有不同。 看看这篇文章: dataframes copies vs views
当与标量索引/切片一起使用时,DataFrame.loc将返回一个视图。
根据这个:
每当索引操作中涉及标签数组或布尔向量时,结果将是副本。使用单标签/标量索引和切片,例如df.ix [3:6]或df.ix [:,'A'],将返回一个视图。
除非使用标签数组或布尔矢量,否则您将获得视图。 使用复制方法可以获得所需的结果。