使用时间片的python变量赋值

时间:2016-04-08 19:18:44

标签: python pandas

这更像是一个新手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。

1 个答案:

答案 0 :(得分:1)

切片列表会创建一个副本,换句话说:

new_list = l[:]

相当于:

new_list = list(l)

DataFrames的工作方式略有不同。 看看这篇文章: dataframes copies vs views

当与标量索引/切片一起使用时,DataFrame.loc将返回一个视图。

根据这个:

  

每当索引操作中涉及标签数组或布尔向量时,结果将是副本。使用单标签/标量索引和切片,例如df.ix [3:6]或df.ix [:,'A'],将返回一个视图。

除非使用标签数组或布尔矢量,否则您将获得视图。 使用复制方法可以获得所需的结果。