第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

連接一個(gè) dask 數(shù)據(jù)框和一個(gè) Pandas 數(shù)據(jù)框

連接一個(gè) dask 數(shù)據(jù)框和一個(gè) Pandas 數(shù)據(jù)框

桃花長(zhǎng)相依 2021-11-09 17:02:51
我有一個(gè)df包含大約 2.5 億行(來自 10Gb CSV 文件)的 dask 數(shù)據(jù)框 ( )。我有另一個(gè)ndf25,000 行的Pandas 數(shù)據(jù)框 ( )。我想通過將每個(gè)項(xiàng)目重復(fù) 10,000 次,將 Pandas 數(shù)據(jù)框的第一列添加到 dask 數(shù)據(jù)框。這是我嘗試過的代碼。我已將問題縮小到較小的范圍。import dask.dataframe as ddimport pandas as pdimport numpy as nppd.DataFrame(np.random.rand(25000, 2)).to_csv("tempfile.csv")df = dd.read_csv("tempfile.csv")ndf = pd.DataFrame(np.random.randint(1000, 3500, size=2500))df['Node'] = np.repeat(ndf[0], 10)使用此代碼,我最終遇到錯(cuò)誤。ValueError:并非所有分區(qū)都是已知的,無法對(duì)齊分區(qū)。請(qǐng)使用set_index來設(shè)置索引。我可以執(zhí)行 areset_index()后跟 aset_index()來制作df.known_divisions Truedask 數(shù)據(jù)框。但這是一項(xiàng)耗時(shí)的操作。有沒有更好更快的方法來做我想做的事情?我可以使用熊貓本身來做到這一點(diǎn)嗎?最終目標(biāo)是從ndf其中的任何相應(yīng)行中找到df與某些條件匹配的行。
查看完整描述

2 回答

?
holdtom

TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超10個(gè)贊

您的基本算法是“我希望將 的前 10 個(gè)值df['Node']設(shè)置為 的第一個(gè)值ndf,將接下來的 10 個(gè)值設(shè)置為 的下一個(gè)值ndf,依此類推”。這在 Dask 中很難,因?yàn)樗恢烂總€(gè)分區(qū)中有多少行:您正在從 CSV 讀取,并且您在 X 字節(jié)中獲得的行數(shù)取決于每個(gè)部分中的數(shù)據(jù)是什么樣的. 其他格式為您提供更多信息...


因此,您肯定需要兩次遍歷數(shù)據(jù)。您可以使用索引來找出劃分并可能進(jìn)行一些排序。在我看來,你能做的最簡(jiǎn)單的事情就是測(cè)量分割長(zhǎng)度,然后得到每個(gè)開始的偏移量:


lengths = df.map_partitions(len).compute()

offsets = np.cumsum(lengths.values)

offsets -= offsets[0]

現(xiàn)在使用自定義延遲功能來處理零件


@dask.delayed

def add_node(part, offset, ndf):

    index = pd.Series(range(offset, offset + len(part)) // 10,

                      index=part.index)  # 10 is the repeat factor

    part['Node'] = index.map(ndf)

    return part


df2 = dd.from_delayed([add_node(d, off, ndf) 

                       for d, off in zip(df.to_delayed(), offsets)])


查看完整回答
反對(duì) 回復(fù) 2021-11-09
?
牛魔王的故事

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超3個(gè)贊

使用相同的工作流程,您可以divisions按照此處的建議手動(dòng)設(shè)置


import dask.dataframe as dd

import pandas as pd

import numpy as np


pd.DataFrame(np.random.rand(25000, 2)).to_csv("tempfile.csv", index=False)

df = dd.read_csv("tempfile.csv")

ndf = pd.DataFrame(np.random.randint(1000, 3500, size=2500))



df.divisions = (0, len(df)-1)

df["Note"] = dd.from_array(np.repeat(ndf.values, 10))

我不認(rèn)為使用np.repeat是非常有效的,特別是對(duì)于大 df。


查看完整回答
反對(duì) 回復(fù) 2021-11-09
  • 2 回答
  • 0 關(guān)注
  • 227 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)