using pandas.融化为大数据框架



我在某处使用了pd。融化来重塑我的数据框架。检查后的这个命令需要大约7分钟才能运行,这在我的用例中太长了(我在交互式仪表板中使用它)。

我想问一下是否有什么方法可以通过熊猫来提高熔体函数的运行时间。
如果不是,是否有可能并且是一种良好的实践,使用大数据包只是为了这行代码?

pd.melt(change_t, id_vars=['id', 'date'], value_vars=factors, value_name='value')
factors=list of 20 columns

我已经计时熔化一个测试表2 id_vars, 20个因素,和1M行,它花了22秒在我的笔记本电脑上。你的桌子大小差不多,还是大得多?如果它是一个巨大的表,是否可以只返回部分熔化的输出到交互式仪表板?我为这种方法放了一些代码,它花了1.3秒返回熔化表的前1000行。

定时熔化大型试验台

import pandas as pd
import numpy as np
import time
id_cols = ['id','date']
n_ids = 1000
n_dates = 100
n_cols = 20
n_rows = 1000000
#Create the test table
df = pd.DataFrame({
'id':np.random.randint(1,n_ids+1,n_rows),
'date':np.random.randint(1,n_dates+1,n_rows),
})
factors = []
for c in range(n_cols):
c_name = 'C{}'.format(c)
factors.append(c_name)
df[c_name] = np.random.random(n_rows)

#Melt and time how long it takes
start = time.time()
pd.melt(df, id_vars=['id', 'date'], value_vars=factors, value_name='value')
print('Melting took',time.time()-start,'seconds for',n_rows,'rows')
#Melting took 21.744 seconds for 1000000 rows

这里有一种方法可以获得前1000行熔化

ret_rows = 1000
start = time.time()
partial_melt_df = pd.DataFrame()
for ks,g in df.groupby(['id','date']):
g_melt = pd.melt(g, id_vars=['id', 'date'], value_vars=factors, value_name='value')
partial_melt_df = pd.concat((partial_melt_df,g_melt), ignore_index=True)

if len(partial_melt_df) >= ret_rows:
partial_melt_df = partial_melt_df.head(ret_rows)
break

print('Partial melting took',time.time()-start,'seconds to give back',ret_rows,'rows')
#Partial melting took 1.298 seconds to give back 1000 rows

最新更新