【发布时间】:2013-10-26 10:20:28
【问题描述】:
很多时候,我有一个大数据框df来保存基础数据,并且需要创建更多的列来保存基础数据列计算的衍生数据。
我可以在 Pandas 中这样做:
df['derivative_col1'] = df['basic_col1'] + df['basic_col2']
df['derivative_col2'] = df['basic_col1'] * df['basic_col2']
....
df['derivative_coln'] = func(list_of_basic_cols)
等等。 Pandas 将一次性为所有派生列计算和分配内存。
我现在想要的是有一个惰性求值机制,将衍生列的计算和内存分配推迟到实际需要的时刻。将lazy_eval_columns 定义为:
df['derivative_col1'] = pandas.lazy_eval(df['basic_col1'] + df['basic_col2'])
df['derivative_col2'] = pandas.lazy_eval(df['basic_col1'] * df['basic_col2'])
这将像 Python 'yield' 生成器一样节省时间/内存,因为如果我发出 df['derivative_col2'] 命令只会触发特定的计算和内存分配。
那么如何在 Pandas 中使用 lazy_eval() 呢?欢迎任何提示/想法/参考。
【问题讨论】:
-
好问题。不过不知道熊猫有没有这种东西。这个想法让我想起了视图中的 SQL 计算列。
标签: python pandas lazy-evaluation