【发布时间】:2018-10-03 11:16:43
【问题描述】:
在我当前的项目中,我正在对森林清单数据进行数据分析,并通过最大似然估计将统计分布拟合到数据中。
我为每个所需的数据子集计算每个数据集的结果,并返回估计的分布参数和我需要的其他指标,然后将它们全部存储在 pandas 数据框中。
到目前为止,我在一个大的 for 循环中遍历每个数据子集,然后将结果逐行分配给数据框。
我想知道有没有更有效的方法来做到这一点?我也不想拥有大量数据副本,因为我经常拥有大约一百万个数据点。
我用人工数据创建了一个非常简化的例子,没有最大似然估计,但这显示了基本结构
import pandas as pd
import scipy as sp
import numpy.random as sprd
def Gen_UniformDist(seed=5, size=1000000):
""" Create a set of random numbers uniformly distributed between 0 and 1 """
sprd.seed(seed)
return sprd.uniform(size=size)
# Generate some test data
dataSet = Gen_UniformDist()
# Create an array of truncation vales
truncValue_arr = sp.linspace(0., 0.9, 20)
df_Output = pd.DataFrame(index=truncValue_arr, columns=['mean', 'NumObs'])
for i, truncValue in enumerate(truncValue_arr):
# Truncate the data using the truncation value
truncated_DataSet = dataSet[ dataSet >= truncValue]
# In my real code the function here is more complex max likelihood
# rather than simple mean used for simplicity here
mean = sp.mean(truncated_DataSet)
numObs = len(truncated_DataSet)
# Real code would calculate more than 2 values for each row
df_Output.iloc[i] = [mean, numObs]
我想要做的是在没有 for 循环的情况下有效地填充数据帧,但也要避免周围有大量数据副本。这可能吗?
【问题讨论】:
-
如果您不想要大量副本,则需要将所有数据volcate到字典中,对字典执行操作,然后删除旧数据并将字典划分为行重新生成整个内容.您还可以在 django 上使用诸如批量创建方法之类的方法来生成 sql 模型,然后再生成另一个数据帧
标签: python pandas performance