Python 2.7 将Python Dask系列转换为循环内部的列表或Dask数据帧
我正在使用Pandas中的一个代码,该代码涉及读取大量文件,然后对循环中的每个文件执行各种操作(循环遍历文件列表) 我正在尝试将其转换为基于Dask的方法,而不是基于熊猫的方法,到目前为止,我有以下尝试-我是Dask新手,需要询问这是否是一种合理的方法 以下是输入数据的外观:Python 2.7 将Python Dask系列转换为循环内部的列表或Dask数据帧,python-2.7,list,pandas,dask,Python 2.7,List,Pandas,Dask,我正在使用Pandas中的一个代码,该代码涉及读取大量文件,然后对循环中的每个文件执行各种操作(循环遍历文件列表) 我正在尝试将其转换为基于Dask的方法,而不是基于熊猫的方法,到目前为止,我有以下尝试-我是Dask新手,需要询问这是否是一种合理的方法 以下是输入数据的外观: A X1 X2 X3 A_d S_d 0 1.0 0.475220 0.839753 0.872468 1 1 1 2.0 0.318410
A X1 X2 X3 A_d S_d
0 1.0 0.475220 0.839753 0.872468 1 1
1 2.0 0.318410 0.940817 0.526758 2 2
2 3.0 0.053959 0.056407 0.169253 3 3
3 4.0 0.900777 0.307995 0.689259 4 4
4 5.0 0.670465 0.939116 0.037865 5 5
代码如下:
import dask.dataframe as dd
import numpy as np; import pandas as pd
def my_func(df,r): # perform representative calculations
q = df.columns.tolist()
df2 = df.loc[:,q[1:]] / df.loc[:,q()[1:]].sum()
df2['A'] = df['A']
df2 = df2[ ( df2['A'] >= r[0] ) & ( df2['A'] <= r[1] ) ]
c = q[1:-2]
A = df2.loc[:,c].sum()
tx = df2.loc[:,c].min() * df2.loc[:,c].max()
return A - tx
list_1 = []
for j in range(1,13):
df = dd.read_csv('Test_file.csv')
N = my_func(df,[751.7,790.4]) # perform calculations
out = ['X'+str(j)+'_2', df['A'].min()] + N.compute().tolist()
list_1.append(out)
df_f = pd.DataFrame(list_1)
导入dask.dataframe作为dd
输入numpy作为np;作为pd进口熊猫
定义我的功能(df,r):#执行代表性计算
q=df.columns.tolist()
df2=df.loc[:,q[1:]/df.loc[:,q()[1:].sum()
df2['A']=df['A']
df2=df2[(df2['A']>=r[0])和(df2['A']
是否可以将N(这是一个Dask系列)作为一行垂直附加到一个空白的Dask DF上?例如,在Pandas中,我倾向于这样做:DF_N=pd.DataFrame()将跳出for循环,然后类似于DF_N=pd.concat([DF_N,N],axis=0)。这将允许在for循环中建立一个Dask DF。之后(跳出循环),我可以轻松地将构建的Dask DF水平连接到pd.DataFrame(列表1)
永远不要将行附加到Pandas数据帧或Dask数据帧。这非常低效。相反,最好将多个Pandas/Dask数据帧收集在一起,然后调用pd.concat
或dd.concat
函数
我还注意到,您正在for循环中调用compute。如果可能的话,建议仅在设置完整个计算之后调用compute。否则您可能无法获得太多并行性
注意:我实际上没有遇到理解代码的麻烦。我只是在最后回答问题。希望其他人能给出更全面的答案。如果你能将问题简化为更小的示例,我怀疑你会更快地得到更好的答案。你可能想阅读好的,这是怎么回事?我已经删除了与熊猫相关的材料,并截断了剩余的基于Dask的代码,以将其保持在最低限度。关于如何处理该系列N
?这里是一个很好的例子,说明了一个最低限度的问题:。stackoverflow用户可以在大约20秒内理解该代码。这是一个很好的数字。是吗一种将Dask系列数据帧放入dd.concat
的方法?它一直要求dfs必须是一个列表,但系列不合适?