日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

讓你的Pandas代碼快得離譜的兩個技巧

來源: 責編: 時間:2024-01-19 09:20:20 311觀看
導讀如果你曾經使用過Pandas處理表格數據,你可能會熟悉導入數據、清洗和轉換的過程,然后將其用作模型的輸入。然而,當你需要擴展和將代碼投入生產時,你的Pandas管道很可能開始崩潰并運行緩慢。在這篇文章中,筆者將分享2個技巧,

如果你曾經使用過Pandas處理表格數據,你可能會熟悉導入數據、清洗和轉換的過程,然后將其用作模型的輸入。然而,當你需要擴展和將代碼投入生產時,你的Pandas管道很可能開始崩潰并運行緩慢。在這篇文章中,筆者將分享2個技巧,幫助你讓Pandas代碼快得離譜,提升數據處理效率并避免常見的陷阱。4RF28資訊網——每日最新資訊28at.com

4RF28資訊網——每日最新資訊28at.com

技巧1:矢量化操作

在Pandas中,矢量化操作是一種強大的工具,它可以用一種更簡潔和高效的方式處理整個數據框的列,而不是逐行循環。4RF28資訊網——每日最新資訊28at.com

它是如何工作的?

廣播是矢量化操作的一個關鍵要素,它允許您直觀地操作具有不同形狀的對象。4RF28資訊網——每日最新資訊28at.com

eg1: 具有3個元素的數組a與標量b相乘,得到與Source形狀相同的數組。4RF28資訊網——每日最新資訊28at.com

4RF28資訊網——每日最新資訊28at.com

eg2: 在進行加法運算時,將形狀為(4,1)的數組a與形狀為(3,)的數組b相加,結果會得到一個形狀為(4,3)的數組。4RF28資訊網——每日最新資訊28at.com

4RF28資訊網——每日最新資訊28at.com

關于這一點已經有很多文章,并且在深度學習中,大規模的矩陣乘法是非常常見的。在本文中,我們將利用兩個簡短的例子上進行討論。4RF28資訊網——每日最新資訊28at.com

首先,假設您想要計算給定整數在列中出現的次數。以下是 2 種可能的方法。4RF28資訊網——每日最新資訊28at.com

"""計算DataFrame X 中 "column_1" 列中等于目標值 target 的元素個數。參數:X: DataFrame,包含要計算的列 "column_1"。target: int,目標值。返回值:int,等于目標值 target 的元素個數。"""# 使用循環計數def count_loop(X, target: int) -> int:    return sum(x == target for x in X["column_1"])# 使用矢量化操作計數def count_vectorized(X, target: int) -> int:    return (X["column_1"] == target).sum()

現在假設有一個DataFrame帶有日期列并希望將其偏移給定的天數。使用矢量化操作計算如下:4RF28資訊網——每日最新資訊28at.com

def offset_loop(X, days: int) -> pd.DataFrame:        d = pd.Timedelta(days=days)    X["column_const"] = [x + d for x in X["column_10"]]    return Xdef offset_vectorized(X, days: int) -> pd.DataFrame:    X["column_const"] = X["column_10"] + pd.Timedelta(days=days)    return X

技巧2:迭代

「for循環」

第一個也是最直觀的迭代方法是使用Python for循環。4RF28資訊網——每日最新資訊28at.com

def loop(df: pd.DataFrame, remove_col: str, words_to_remove_col: str) -> list[str]:    res = []    i_remove_col = df.columns.get_loc(remove_col)    i_words_to_remove_col = df.columns.get_loc(words_to_remove_col)    for i_row in range(df.shape[0]):        res.append(            remove_words(                df.iat[i_row, i_remove_col], df.iat[i_row, i_words_to_remove_col]            )        )    return result

「apply」

def apply(df: pd.DataFrame, remove_col: str, words_to_remove_col: str) -> list[str]:    return df.apply(        func=lambda x: remove_words(x[remove_col], x[words_to_remove_col]), axis=1    ).tolist()

在 df.apply 的每次迭代中,提供的可調用函數獲取一個 Series,其索引為 df.columns,其值是行的。這意味著 pandas 必須在每個循環中生成該序列,這是昂貴的。為了降低成本,最好對您知道將使用的 df 子集調用 apply,如下所示:4RF28資訊網——每日最新資訊28at.com

def apply_only_used_cols(df: pd.DataFrame, remove_col: str, words_to_remove_col: str) -> list[str]:    return df[[remove_col, words_to_remove_col]].apply(        func=lambda x: remove_words(x[remove_col], x[words_to_remove_col]), axis=1    )

「列表組合+itertuples」

使用itertuples與列表相結合進行迭代肯定會更好。itertuples生成帶有行數據的(命名)元組。4RF28資訊網——每日最新資訊28at.com

def itertuples_only_used_cols(df: pd.DataFrame, remove_col: str, words_to_remove_col: str) -> list[str]:    return [        remove_words(x[0], x[1])        for x in df[[remove_col, words_to_remove_col]].itertuples(            index=False, name=None        )    ]

「列表組合+zip」

zip接受可迭代對象并生成元組,其中第i個元組按順序包含所有給定可迭代對象的第i個元素。4RF28資訊網——每日最新資訊28at.com

def zip_only_used_cols(df: pd.DataFrame, remove_col: str, words_to_remove_col: str) -> list[str]:    return [remove_words(x, y) for x, y in zip(df[remove_col], df[words_to_remove_col])]

「列表組合+to_dict」

def to_dict_only_used_columns(df: pd.DataFrame) -> list[str]:        return [            remove_words(row[remove_col], row[words_to_remove_col])            for row in df[[remove_col, words_to_remove_col]].to_dict(orient="records")        ]

「緩存」

除了我們討論的迭代技術之外,另外兩種方法可以幫助提高代碼的性能:緩存和并行化。如果使用相同的參數多次調用 pandas 函數,緩存會特別有用。例如,如果remove_words應用于具有許多重復值的數據集,您可以使用它functools.lru_cache來存儲函數的結果并避免每次都重新計算它們。要使用lru_cache,只需將@lru_cache裝飾器添加到 的聲明中remove_words,然后使用您首選的迭代方法將該函數應用于您的數據集。這可以顯著提高代碼的速度和效率。以下面的代碼為例:4RF28資訊網——每日最新資訊28at.com

@lru_cachedef remove_words(...):    ... # Same implementation as beforedef zip_only_used_cols_cached(df: pd.DataFrame, remove_col: str, words_to_remove_col: str) -> list[str]:    return [remove_words(x, y) for x, y in zip(df[remove_col], df[words_to_remove_col])]

添加此裝飾器會生成一個函數,該函數會“記住”之前遇到的輸入的輸出,從而無需再次運行所有代碼。4RF28資訊網——每日最新資訊28at.com

「并行化」

最后一張王牌是使用 pandarallel 跨多個獨立的 df 塊并行化我們的函數調用。該工具易于使用:您只需導入并初始化它,然后將所有 .applys 更改為 .parallel_applys。4RF28資訊網——每日最新資訊28at.com

from pandarallel import pandarallelpandarallel.initialize(nb_workers=min(os.cpu_count(), 12))def parapply_only_used_cols(df: pd.DataFrame, remove_col: str, words_to_remove_col: str) -> list[str]:    return df[[remove_col, words_to_remove_col]].parallel_apply(        lambda x: remove_words(x[remove_col], x[words_to_remove_col]), axis=1    )

本文鏈接:http://m.www897cc.com/showinfo-26-64975-0.html讓你的Pandas代碼快得離譜的兩個技巧

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 2024年不容錯過的十大開發框架

下一篇: 12 月網約車行業共收到 8.94 億單環比上升 8.3%,如祺出行蟬聯訂單合規率榜首

標簽:
  • 熱門焦點
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
国产精品成人在线观看| 狠狠色综合播放一区二区| 欧美电影免费观看网站| 欧美国产日韩精品| 国产精品大片免费观看| 国产模特精品视频久久久久| 好看的亚洲午夜视频在线| 亚洲精品久久久久久久久| 亚洲一区在线免费| 久久国产乱子精品免费女| 久久午夜电影| 欧美日韩亚洲一区二区三区在线观看 | 一本色道久久综合亚洲91| 午夜亚洲伦理| 美女精品国产| 国产精品国产三级国产| 精品9999| 亚洲视频大全| 欧美一区国产一区| 欧美成人自拍| 国产乱人伦精品一区二区 | 国产精品毛片在线| 亚洲国产成人久久综合| 亚洲综合国产| 欧美电影电视剧在线观看| 国产精品一区在线观看你懂的| 亚洲电影在线播放| 亚洲欧美日本日韩| 欧美国产乱视频| 国产欧美日韩综合一区在线观看| 亚洲人成人99网站| 欧美一区二区高清在线观看| 欧美国产丝袜视频| 国内揄拍国内精品久久| 在线一区观看| 六十路精品视频| 国产乱码精品一区二区三区五月婷| 最新国产成人在线观看| 欧美在线网站| 国产精品二区二区三区| 亚洲国产日韩美| 久久精品99国产精品日本| 国产精品av免费在线观看| 亚洲激情影视| 久久日韩粉嫩一区二区三区| 国产精品国产三级欧美二区| 亚洲精选一区| 免费观看国产成人| 国内精品**久久毛片app| 亚洲专区一区| 欧美日韩一区视频| 亚洲欧洲精品一区| 久久免费高清| 国产有码在线一区二区视频| 亚洲欧美欧美一区二区三区| 欧美日韩视频在线| 91久久精品久久国产性色也91 | 欧美视频二区| 99精品久久免费看蜜臀剧情介绍| 欧美99在线视频观看| 一区二区视频免费在线观看| 欧美一区二区三区在线看| 国产精品免费看| 亚洲午夜精品17c| 欧美日韩在线不卡| 一区二区欧美亚洲| 欧美日韩免费视频| 日韩一区二区福利| 欧美精品在线观看一区二区| 亚洲精品国产系列| 欧美激情久久久久久| 亚洲国产三级| 欧美电影在线观看完整版| 亚洲国产精品精华液网站| 久久人体大胆视频| 1024国产精品| 免费的成人av| 亚洲精品一区二区三区樱花 | 欧美高清自拍一区| 亚洲日本视频| 欧美精品精品一区| 亚洲精品综合| 欧美三级视频| 亚洲一线二线三线久久久| 欧美午夜精品电影| 亚洲一区二区黄| 国产精品日韩在线播放| 亚洲一区视频| 国产欧美日韩麻豆91| 久久精品道一区二区三区| 黄色亚洲精品| 欧美国产先锋| 一区二区三区欧美| 国产精品欧美精品| 欧美在线视频观看| 影音先锋在线一区| 欧美精品国产| 国产精品99久久不卡二区| 国产精品久久夜| 欧美一级免费视频| 在线精品国精品国产尤物884a| 欧美jizzhd精品欧美喷水 | 亚洲综合色在线| 国产欧美日韩| 久久乐国产精品| 亚洲精品1区2区| 欧美三级乱人伦电影| 午夜视频久久久| 又紧又大又爽精品一区二区| 欧美国产一区二区三区激情无套| 宅男噜噜噜66一区二区| 国产视频在线观看一区二区| 久久深夜福利免费观看| 亚洲精品影院| 国产精品日韩精品| 久久午夜影视| 亚洲精品一区二| 国产精品一区二区在线| 久久一区免费| 一本久久a久久精品亚洲| 国产乱人伦精品一区二区 | 香蕉久久夜色精品国产使用方法 | 久久99伊人| 亚洲国产欧美一区二区三区丁香婷| 欧美午夜一区二区福利视频| 久久精品国产亚洲一区二区三区| 亚洲国产影院| 国产精品视频自拍| 久久一区二区视频| 在线亚洲一区| 在线看成人片| 国产精品毛片| 麻豆成人91精品二区三区| 一区二区三区av| 黄色成人片子| 欧美日韩一区二| 久久理论片午夜琪琪电影网| 一本色道**综合亚洲精品蜜桃冫| 国产午夜久久久久| 欧美日产一区二区三区在线观看| 欧美在线一二三| 99在线|亚洲一区二区| 狠狠综合久久av一区二区老牛| 欧美日韩在线视频首页| 久久婷婷久久| 亚洲一二三级电影| 亚洲大片在线观看| 国产精品一区二区三区乱码| 欧美极品影院| 久久久久久久久伊人| 亚洲午夜激情免费视频| 亚洲国产精品毛片| 国产视频自拍一区| 欧美午夜在线观看| 欧美电影在线观看完整版| 欧美一区二区视频在线观看2020| 日韩亚洲精品电影| 在线观看91精品国产入口| 国产精品热久久久久夜色精品三区 | 国产日韩在线视频| 欧美日韩在线视频首页| 欧美gay视频激情| 欧美一区二区视频免费观看| 一区二区三区欧美| 亚洲欧洲在线一区| 狠狠爱成人网| 国产女人18毛片水18精品| 欧美日韩精品二区| 麻豆精品一区二区av白丝在线| 欧美一区二区在线看| 亚洲校园激情| 99热在这里有精品免费| 91久久国产精品91久久性色| 黄色成人在线| 国精品一区二区三区| 国产日韩av在线播放| 国产精品久久久久aaaa| 欧美日韩少妇| 欧美精品一区三区在线观看| 免费看av成人| 久久亚洲综合| 久久久久综合一区二区三区| 欧美一级成年大片在线观看| 亚洲欧美日韩国产成人精品影院| 亚洲视频专区在线| 在线中文字幕一区| 99精品国产在热久久婷婷| 亚洲精品国产拍免费91在线| 亚洲国产精品999| 尤物在线观看一区| 影音先锋在线一区| 伊人精品成人久久综合软件| 国内揄拍国内精品少妇国语| 国产一区观看| 好吊色欧美一区二区三区四区 | 欧美伦理影院| 欧美精品一区在线| 欧美极品aⅴ影院| 欧美喷潮久久久xxxxx| 欧美精品免费在线| 欧美片第一页| 欧美日韩国产色综合一二三四| 欧美美女bbbb| 欧美日韩亚洲综合一区|