Python Dask-将多列合并为一列

Python Dask-将多列合并为一列,python,pandas,dask,Python,Pandas,Dask,我有一个dask数据帧,如下所示: Column1 Column2 Column3 Column4 Column5 0 a 1 2 3 4 1 a 3 4 5 2 b 6 7 8 3 c 7 7 我想将所有列高效地合并到一个列中。我希望每一行都是一个字符串。如下图所示

我有一个dask数据帧,如下所示:

   Column1  Column2  Column3  Column4  Column5
 0    a        1        2        3        4
 1    a        3        4        5
 2    b        6        7        8
 3    c        7        7        
我想将所有列高效地合并到一个列中。我希望每一行都是一个字符串。如下图所示:

   Merged_Column
 0    a,1,2,3,4   
 1    a,3,4,5  
 2    b,6,7,8  
 3    c,7,7,7        
我见过,但它似乎没有效率,因为它使用的是apply函数。我如何才能尽可能高效地实现这一点?(速度+内存使用)或is apply并不像我认为的那样有问题,因为这是dask,而不是熊猫

这就是我所尝试的。它似乎正在工作,但我担心它与大数据帧的速度。

cols= df.columns
df['combined'] = df[cols].apply(func=(lambda row: ' '.join(row.values.astype(str))), axis=1, meta=('str'))
df = df.drop(cols, axis=1)

我还需要去掉列标题。

Lambda函数将占用每一行,因此它可能会影响进程的速度

因此,如果我们按列方式应用该操作,速度会很快

df=df.astype(str)
df[“Column1”]+”、“+df[“Column2”]+”、“+df[“Column3”]+”、“+df[“Column4”]+”、“+df[“Column5”]

Lambda函数将占用每一行,因此它可能会影响进程的速度

因此,如果我们按列方式应用该操作,速度会很快

df=df.astype(str)
df[“Column1”]+”、“+df[“Column2”]+”、“+df[“Column3”]+”、“+df[“Column4”]+”、“+df[“Column5”]

当你必须加入string@saravanan-saminathan时,方法可以轻而易举地获胜。这里有一些使用
dask的定时

导入dask.dataframe作为dd
将numpy作为np导入
作为pd进口熊猫
N=int(1e6)
df=pd.DataFrame(np.random.randint(0100,[N,10]))
df=dd.from_熊猫(df,npartitions=4)
df=df.astype(“str”)
df_bk=df.copy()
申请
%%次
df[“comb”]=df.apply(λx:,”.join(x),axis=1,meta=(“str”))
df=df.compute()
CPU时间:用户44.4秒,系统925毫秒,总计45.3秒
壁时间:44.6秒
添加(显式)
df=df_bk.copy()
%%时间
df[“comb”]=df[0]+,“+df[1]+”,“+df[2]+”,“+df[3]+”,“+df[4]+”,”+\
“df[5]+”,“+df[6]+”,“+df[7]+”,“+df[8]+”,“+df[9]
df=df.compute()
CPU时间:用户8.95秒,系统860毫秒,总计9.81秒
壁时间:9.56秒
添加(循环) 如果你有很多专栏,你不想把它们都写下来

df=df_bk.copy()
%%时间
df[“梳”]=“梳”
对于df.列中的列:
df[“comb”]+=df[col]+“,”
df=df.compute()
CPU时间:用户11.6秒,系统1.32秒,总计12.9秒
壁时间:12.3秒

当你必须加入string@saravanan-saminathan时,方法可以轻而易举地获胜。这里有一些使用
dask的定时

导入dask.dataframe作为dd
将numpy作为np导入
作为pd进口熊猫
N=int(1e6)
df=pd.DataFrame(np.random.randint(0100,[N,10]))
df=dd.from_熊猫(df,npartitions=4)
df=df.astype(“str”)
df_bk=df.copy()
申请
%%次
df[“comb”]=df.apply(λx:,”.join(x),axis=1,meta=(“str”))
df=df.compute()
CPU时间:用户44.4秒,系统925毫秒,总计45.3秒
壁时间:44.6秒
添加(显式)
df=df_bk.copy()
%%时间
df[“comb”]=df[0]+,“+df[1]+”,“+df[2]+”,“+df[3]+”,“+df[4]+”,”+\
“df[5]+”,“+df[6]+”,“+df[7]+”,“+df[8]+”,“+df[9]
df=df.compute()
CPU时间:用户8.95秒,系统860毫秒,总计9.81秒
壁时间:9.56秒
添加(循环) 如果你有很多专栏,你不想把它们都写下来

df=df_bk.copy()
%%时间
df[“梳”]=“梳”
对于df.列中的列:
df[“comb”]+=df[col]+“,”
df=df.compute()
CPU时间:用户11.6秒,系统1.32秒,总计12.9秒
壁时间:12.3秒

标题“添加(循环)”下的代码段在df[“comb”]列中返回“nan”。你确定这样做有效吗?我刚刚在循环之前检查了df内部的内容,它包含的值不是nan。标题“添加(循环)”下的代码段在df[“comb”]列中返回“nan”。你确定这有效吗?我刚刚在循环之前检查了df的内部,它包含的值不是NaN。