精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

十個Pandas的另類數據處理技巧

開發 前端
本文所整理的技巧與以前整理過10個Pandas的常用技巧不同,你可能并不會經常的使用它,但是有時候當你遇到一些非常棘手的問題時,這些技巧可以幫你快速解決一些不常見的問題。

本文所整理的技巧與以前整理過10個Pandas的常用技巧不同,你可能并不會經常的使用它,但是有時候當你遇到一些非常棘手的問題時,這些技巧可以幫你快速解決一些不常見的問題。

1、Categorical類型

默認情況下,具有有限數量選項的列都會被分配object 類型。 但是就內存來說并不是一個有效的選擇。 我們可以這些列建立索引,并僅使用對對象的引用而實際值。Pandas 提供了一種稱為 Categorical的Dtype來解決這個問題。

例如一個帶有圖片路徑的大型數據集組成。 每行有三列:anchor, positive, and negative.。

如果類別列使用 Categorical 可以顯著減少內存使用量。

# raw data
+----------+------------------------+
| class | filename |
+----------+------------------------+
| Bathroom | Bathroom\bath_1.jpg |
| Bathroom | Bathroom\bath_100.jpg |
| Bathroom | Bathroom\bath_1003.jpg |
| Bathroom | Bathroom\bath_1004.jpg |
| Bathroom | Bathroom\bath_1005.jpg |
+----------+------------------------+

# target
+------------------------+------------------------+----------------------------+
| anchor | positive | negative |
+------------------------+------------------------+----------------------------+
| Bathroom\bath_1.jpg | Bathroom\bath_100.jpg | Dinning\din_540.jpg |
| Bathroom\bath_100.jpg | Bathroom\bath_1003.jpg | Dinning\din_1593.jpg |
| Bathroom\bath_1003.jpg | Bathroom\bath_1004.jpg | Bedroom\bed_329.jpg |
| Bathroom\bath_1004.jpg | Bathroom\bath_1005.jpg | Livingroom\living_1030.jpg |
| Bathroom\bath_1005.jpg | Bathroom\bath_1007.jpg | Bedroom\bed_1240.jpg |
+------------------------+------------------------+----------------------------+

filename列的值會經常被復制重復。因此,所以通過使用Categorical可以極大的減少內存使用量。

讓我們讀取目標數據集,看看內存的差異:

triplets.info(memory_usage="deep")

# Column Non-Null Count Dtype
# --- ------ -------------- -----
# 0 anchor 525000 non-null category
# 1 positive 525000 non-null category
# 2 negative 525000 non-null category
# dtypes: category(3)
# memory usage: 4.6 MB

# without categories
triplets_raw.info(memory_usage="deep")

# Column Non-Null Count Dtype
# --- ------ -------------- -----
# 0 anchor 525000 non-null object
# 1 positive 525000 non-null object
# 2 negative 525000 non-null object
# dtypes: object(3)
# memory usage: 118.1 MB

差異非常大,并且隨著重復次數的增加,差異呈非線性增長。

2、行列轉換

sql中經常會遇到行列轉換的問題,Pandas有時候也需要,讓我們看看來自Kaggle比賽的數據集。census_start .csv文件:

可以看到,這些按年來保存的,如果有一個列year和pct_bb,并且每一行有相應的值,則會好得多,對吧。

cols = sorted([col for col in original_df.columns \
if col.startswith("pct_bb")])
df = original_df[(["cfips"] + cols)]
df = df.melt(id_vars="cfips",
value_vars=cols,
var_name="year",
value_name="feature").sort_values(by=["cfips", "year"])

看看結果,這樣是不是就好很多了:

圖片

3、apply()很慢

我們上次已經介紹過,最好不要使用這個方法,因為它遍歷每行并調用指定的方法。但是要是我們沒有別的選擇,那還有沒有辦法提高速度呢?

可以使用swifter或pandarallew這樣的包,使過程并行化。

Swifter

import pandas as pd
import swifter

def target_function(row):
return row * 10

def traditional_way(data):
data['out'] = data['in'].apply(target_function)

def swifter_way(data):
data['out'] = data['in'].swifter.apply(target_function)

Pandarallel

import pandas as pd
from pandarallel import pandarallel

def target_function(row):
return row * 10

def traditional_way(data):
data['out'] = data['in'].apply(target_function)

def pandarallel_way(data):
pandarallel.initialize()
data['out'] = data['in'].parallel_apply(target_function)

通過多線程,可以提高計算的速度,當然當然,如果有集群,那么最好使用dask或pyspark

4、空值,int, Int64

標準整型數據類型不支持空值,所以會自動轉換為浮點數。所以如果數據要求在整數字段中使用空值,請考慮使用Int64數據類型,因為它會使用pandas.NA來表示空值。

5、Csv, 壓縮還是parquet?

盡可能選擇parquet。parquet會保留數據類型,在讀取數據時就不需要指定dtypes。parquet文件默認已經使用了snappy進行壓縮,所以占用的磁盤空間小。下面可以看看幾個的對比

|        file            |  size   |
+------------------------+---------+
| triplets_525k.csv | 38.4 MB |
| triplets_525k.csv.gzip | 4.3 MB |
| triplets_525k.csv.zip | 4.5 MB |
| triplets_525k.parquet | 1.9 MB |
+------------------------+---------+

讀取parquet需要額外的包,比如pyarrow或fastparquet。chatgpt說pyarrow比fastparquet要快,但是我在小數據集上測試時fastparquet比pyarrow要快,但是這里建議使用pyarrow,因為pandas 2.0也是默認的使用這個。

6、value_counts ()

計算相對頻率,包括獲得絕對值、計數和除以總數是很復雜的,但是使用value_counts,可以更容易地完成這項任務,并且該方法提供了包含或排除空值的選項。

df = pd.DataFrame({"a": [1, 2, None], "b": [4., 5.1, 14.02]})
df["a"] = df["a"].astype("Int64")
print(df.info())
print(df["a"].value_counts(normalize=True, dropna=False),
df["a"].value_counts(normalize=True, dropna=True), sep="\n\n")

圖片

這樣是不是就簡單很多了

7、Modin

注意:Modin現在還在測試階段。

pandas是單線程的,但Modin可以通過縮放pandas來加快工作流程,它在較大的數據集上工作得特別好,因為在這些數據集上,pandas會變得非常緩慢或內存占用過大導致OOM。

!pip install modin[all]

import modin.pandas as pd
df = pd.read_csv("my_dataset.csv")

以下是modin官網的架構圖,有興趣的研究把:

圖片

8、extract()

如果經常遇到復雜的半結構化的數據,并且需要從中分離出單獨的列,那么可以使用這個方法:

import pandas as pd

regex = (r'(?P<title>[A-Za-z\'\s]+),'
r'(?P<author>[A-Za-z\s\']+),'
r'(?P<isbn>[\d-]+),'
r'(?P<year>\d{4}),'
r'(?P<publisher>.+)')
addr = pd.Series([
"The Lost City of Amara,Olivia Garcia,978-1-234567-89-0,2023,HarperCollins",
"The Alchemist's Daughter,Maxwell Greene,978-0-987654-32-1,2022,Penguin Random House",
"The Last Voyage of the HMS Endeavour,Jessica Kim,978-5-432109-87-6,2021,Simon & Schuster",
"The Ghosts of Summer House,Isabella Lee,978-3-456789-12-3,2000,Macmillan Publishers",
"The Secret of the Blackthorn Manor,Emma Chen,978-9-876543-21-0,2023,Random House Children's Books"
])
addr.str.extract(regex)

圖片

9、讀寫剪貼板

這個技巧有人一次也用不到,但是有人可能就是需要,比如:在分析中包含PDF文件中的表格時。通常的方法是復制數據,粘貼到Excel中,導出到csv文件中,然后導入Pandas。但是,這里有一個更簡單的解決方案:pd.read_clipboard()。我們所需要做的就是復制所需的數據并執行一個方法。

有讀就可以寫,所以還可以使用to_clipboard()方法導出到剪貼板。

但是要記住,這里的剪貼板是你運行python/jupyter主機的剪切板,并不可能跨主機粘貼,一定不要搞混了。

10、數組列分成多列

假設我們有這樣一個數據集,這是一個相當典型的情況:

import pandas as pd
df = pd.DataFrame({"a": [1, 2, 3],
"b": [4, 5, 6],
"category": [["foo", "bar"], ["foo"], ["qux"]]})

# let's increase the number of rows in a dataframe
df = pd.concat([df]*10000, ignore_index=True)

圖片

我們想將category分成多列顯示,例如下面的

圖片

先看看最慢的apply:

def dummies_series_apply(df):
return df.join(df['category'].apply(pd.Series) \
.stack() \
.str.get_dummies() \
.groupby(level=0) \
.sum()) \
.drop("category", axis=1)
%timeit dummies_series_apply(df.copy())
#5.96 s ± 66.6 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

sklearn的MultiLabelBinarizer

from sklearn.preprocessing import MultiLabelBinarizer
def sklearn_mlb(df):
mlb = MultiLabelBinarizer()
return df.join(pd.DataFrame(mlb.fit_transform(df['category']), columns=mlb.classes_)) \
.drop("category", axis=1)
%timeit sklearn_mlb(df.copy())
#35.1 ms ± 1.31 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

是不是快了很多,我們還可以使用一般的向量化操作對其求和:

def dummies_vectorized(df):
return pd.get_dummies(df.explode("category"), prefix="cat") \
.groupby(["a", "b"]) \
.sum() \
.reset_index()
%timeit dummies_vectorized(df.copy())
#29.3 ms ± 1.22 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

圖片

使用第一個方法(在StackOverflow上的回答中非常常見)會給出一個非常慢的結果。而其他兩個優化的方法的時間是非常快速的。

總結

我希望每個人都能從這些技巧中學到一些新的東西。重要的是要記住盡可能使用向量化操作而不是apply()。此外,除了csv之外,還有其他有趣的存儲數據集的方法。不要忘記使用分類數據類型,它可以節省大量內存。感謝閱讀!

責任編輯:華軒 來源: DeepHub IMBA
相關推薦

2024-05-13 11:43:39

Python數據分析CSV

2022-10-19 15:20:58

pandas數據處理庫技巧

2023-10-16 07:55:15

JavaScript對象技巧

2019-08-19 18:42:43

大數據海量數據

2023-09-25 13:19:41

pandasPython

2023-07-24 07:11:43

2024-12-03 14:33:42

Python遞歸編程

2023-11-08 18:05:06

Python類型技巧

2025-03-27 10:03:17

PythonPandas代碼

2025-08-14 02:00:00

2015-08-24 09:12:00

Redis 技巧

2023-07-02 14:21:06

PythonMatplotlib數據可視化庫

2022-08-26 09:38:39

Pandas數據查詢

2023-01-17 16:43:19

JupyterLab技巧工具

2024-12-24 08:23:31

2022-05-12 08:12:51

PythonPip技巧

2024-01-30 00:40:10

2010-09-08 14:35:22

CSS

2022-11-07 16:06:15

TypeScript開發技巧

2011-08-22 12:24:56

nagios
點贊
收藏

51CTO技術棧公眾號

精品国产视频一区二区三区| 日本精品免费在线观看| 国产三级在线观看视频| 影音先锋久久| 亚洲欧美三级在线| www.com污| 极品美鲍一区| 国产精品美女久久久久久久网站| 91精品视频播放| 日本一级一片免费视频| 欧美第十八页| 日韩av中文字幕在线免费观看| 日本va中文字幕| 日韩伦理电影网站| 中文av字幕一区| 国产精品视频入口| 91女人18毛片水多国产| 一道本在线免费视频| 国产精品久久久久久久久久精爆| 欧美a级成人淫片免费看| 精品国产乱码久久久久久1区2区| 少妇激情一区二区三区| 182在线播放| 中文字幕五月欧美| 欧美精品一区二区三区久久| 99热这里只有精品66| 肉色丝袜一区二区| 亚州国产精品久久久| 欧洲美女女同性互添| 一区二区三区四区在线看| 欧美一级免费观看| 在线黄色免费观看| 精品免费av在线 | 精品国产一区二区三区忘忧草| 大香煮伊手机一区| 欧美男男激情videos| 一区二区欧美精品| 国产精品无码乱伦| 亚乱亚乱亚洲乱妇| 日本一区免费视频| 免费不卡亚洲欧美| 亚洲av成人无码网天堂| 国产成人av一区二区| 91精品在线观看视频| 中国女人一级一次看片| 久久国产毛片| 日韩美女视频免费看| 一级免费在线观看| 国产精品免费看| 97色伦亚洲国产| 日本特黄特色aaa大片免费| 一本到12不卡视频在线dvd| 日韩中文在线观看| 蜜桃av免费观看| 日韩精品dvd| 在线成人免费网站| 久久免费手机视频| 精品国产不卡| 在线观看欧美日韩| 青青操在线播放| 国产精品久久久久久久| 久久久www成人免费精品张筱雨 | 综合亚洲深深色噜噜狠狠网站| 日产国产精品精品a∨| 韩国福利在线| 国产精品日日摸夜夜摸av| 日韩欧美亚洲区| 永久免费av在线| 亚洲九九爱视频| 波多野结衣与黑人| h片在线观看视频免费| 欧美日韩国产精品一区| 成人在线激情网| 国产精品亲子伦av一区二区三区| 欧美亚洲国产一区在线观看网站| 爆乳熟妇一区二区三区霸乳| 国产香蕉久久| 91精品黄色片免费大全| 国产精品91av| 丝袜美腿一区二区三区动态图| 日韩精品www| 日韩av片在线| 亚洲国产精品成人| 91国产视频在线| 中文在线免费看视频| 国产一区二区91| 久久久精品国产一区二区三区| 成人免费在线电影| 亚洲精品欧美激情| 国产精品一区二区免费在线观看| 亚洲www啪成人一区二区| 欧美美女喷水视频| 亚洲av成人片无码| 日本一区二区在线看| 久久成人在线视频| 国产精品一区二区三区四| 免费不卡在线观看| 国产精品久久久久av福利动漫| 欧美色18zzzzxxxxx| 国产精品久久久久aaaa樱花| 国产精品国产三级国产专区51| 中文字幕在线免费观看视频| 欧美日韩日日摸| av电影在线播放| 日本一区二区免费高清| 三级久久三级久久久| 亚洲欧美日韩直播| 妺妺窝人体色www在线下载| 亚洲欧美日韩国产综合精品二区| 91精品久久久久久久久久久久久久| 亚洲国产精品二区| 亚洲国产成人一区二区三区| 福利视频一二区| 人人精品久久| 亚洲欧美国内爽妇网| 蜜臀久久精品久久久用户群体| 亚洲欧美日本日韩| 99精品欧美一区二区三区| 国产亚洲依依| 亚洲va在线va天堂| 激情成人在线观看| 色喇叭免费久久综合网| 2019中文在线观看| 亚洲成人中文字幕在线| 自拍偷拍亚洲综合| wwwwww.色| 国产精品密蕾丝视频下载| 欧美精品电影在线| 国产suv一区二区| 国产精品污网站| www黄色av| 成人性生交大片免费看96| 久久亚洲综合国产精品99麻豆精品福利 | 卡一精品卡二卡三网站乱码| 成年无码av片在线| 亚洲无码精品国产| 国产欧美视频在线观看| 欧美网站免费观看| 日韩成人av在线资源| 欧美激情欧美激情在线五月| 精品人妻aV中文字幕乱码色欲| 中文字幕永久在线不卡| 免费一区二区三区在线观看 | 国产亚洲激情在线| 亚洲国产成人无码av在线| 99精品视频一区| heyzo国产| 偷窥自拍亚洲色图精选| 国内揄拍国内精品少妇国语| 黄色www视频| 亚洲国产精品精华液网站| 中文字幕永久免费| 影音先锋久久久| 国产一区二区免费在线观看| 丰乳肥臀在线| 亚洲成人教育av| 男人的天堂一区二区| 91免费精品国自产拍在线不卡| 日本xxxxxxxxxx75| 色婷婷av一区二区三区丝袜美腿| 亚洲18私人小影院| 户外极限露出调教在线视频| 在线国产亚洲欧美| 永久免费未视频| 国产高清久久久| 免费看黄在线看| 自拍欧美一区| 国产精品免费视频xxxx| 嫩草在线视频| 精品福利一区二区三区| 亚洲另类欧美日韩| 日本一区二区三区久久久久久久久不| jizz欧美激情18| 这里只有精品在线| 国产乱人伦精品一区二区| 亚洲欧美小说色综合小说一区| 亚洲人成在线观| 99久久久无码国产精品免费| 亚洲一二三四在线| 国产又粗又猛又爽视频| 久久99最新地址| 久久亚洲中文字幕无码| 欧美伦理影院| 91在线精品观看| 国产精品高清乱码在线观看| 精品国产一区二区三区久久久 | 精品中文字幕久久久久久| 国产无遮挡又黄又爽又色视频| 中文字幕乱码一区二区免费| 中文字幕avav| 丝袜亚洲另类欧美综合| 一级一片免费播放| 午夜欧洲一区| 亚洲一区精品电影| 日韩电影免费观| 色综合久久久888| 成人免费在线视频网| 欧美成人一区二区三区在线观看 | 另类av一区二区| 中文字幕一区二区三区5566| 成人免费网站黄| 麻豆一区二区| 成人精品久久av网站| 欧美裸体视频| 久久成人在线视频| 电影在线高清| 亚洲国产日韩一区| 国产草草影院ccyycom| 色综合激情五月| 久久免费播放视频| 亚洲欧洲国产专区| 欧美老熟妇乱大交xxxxx| 国产aⅴ综合色| 在线观看免费不卡av| 免费永久网站黄欧美| 成人在线视频一区二区三区| 欧美中文字幕一区二区| 精品视频导航| 日韩一区二区三区高清在线观看| 国产福利精品视频| 小早川怜子影音先锋在线观看| 久久不射电影网| 欧美精品电影| 中文精品99久久国产香蕉| 四虎影视精品成人| 亚洲成人av在线| 性色av蜜臀av| 在线电影院国产精品| 超碰在线免费97| 色综合一个色综合亚洲| 日韩精品久久久久久久| 亚洲精品国产一区二区精华液 | 国产自产一区二区| 日韩欧美区一区二| 国产人妻精品一区二区三区| 欧美私模裸体表演在线观看| 中文字幕在线欧美| 欧美性xxxx18| 日韩特级黄色片| 天天综合日日夜夜精品| 精品无码m3u8在线观看| 一区二区高清免费观看影视大全| 国产色无码精品视频国产| 中文字幕精品在线不卡| 国产综合精品久久久久成人av| 久久亚洲影视婷婷| 精品少妇一区二区三区免费观| 99re在线视频这里只有精品| 精品影片一区二区入口| 成人av网站在线观看免费| 视频免费在线观看| 91小视频免费看| 亚洲精品国产91| 国产情人综合久久777777| 99久久99久久精品免费| 欧美国产国产综合| 很污很黄的网站| 日韩一区日韩二区| 成人观看免费视频| 亚洲午夜国产一区99re久久| 免费一级特黄特色大片| 天天av天天翘天天综合网色鬼国产| 日产精品久久久久| 色先锋资源久久综合| 中文字幕人妻色偷偷久久| 欧美妇女性影城| www夜片内射视频日韩精品成人| 日韩精品一区二区三区视频播放 | 最近日韩中文字幕| 欧美黄色免费观看| 亚洲女人****多毛耸耸8| 免看一级a毛片一片成人不卡| 亚洲综合成人在线视频| 日产电影一区二区三区| 在线视频你懂得一区| 91九色蝌蚪91por成人| 欧美本精品男人aⅴ天堂| 人人妻人人澡人人爽人人欧美一区 | 日本一区二区免费高清| 乱子伦一区二区| 亚洲大片在线| 91视频免费版污| 国产一区二区福利视频| 国产人妻人伦精品1国产丝袜| 国产日韩欧美亚洲| 老湿机69福利| 欧美性猛交xxx| 91精品国产乱码久久| 精品国产一区二区精华| 国产香蕉在线| 久久97精品久久久久久久不卡| 在线看片国产福利你懂的| 国产日韩在线视频| 米奇精品关键词| 手机成人av在线| 免费精品视频| 国产一级二级av| 亚洲国产岛国毛片在线| 日本天堂在线视频| 欧美精品自拍偷拍| 三级国产在线观看| 欧美日本中文字幕| 看片一区二区| 麻豆久久久9性大片| 永久91嫩草亚洲精品人人| 能看的毛片网站| 成人av第一页| 少妇人妻丰满做爰xxx| 国产精品久久久久久福利| 欧美激情区在线播放| 麻豆久久久久| 久久99精品国产一区二区三区| 99视频精品全国免费| 日韩黄色片视频| 成人动漫一区二区在线| 99鲁鲁精品一区二区三区| 色哟哟日韩精品| 十八禁一区二区三区| 欧美日韩福利电影| 国产成人免费| 日韩视频专区| 制服诱惑一区二区| 图片区偷拍区小说区| 亚洲人成网站影音先锋播放| 制服丝袜在线一区| 亚洲一级黄色片| 美脚恋feet久草欧美| 国产伦精品一区二区三区照片91| 国产精品传媒精东影业在线| 手机在线看福利| 久久久精品免费观看| 在线观看精品国产| 精品盗摄一区二区三区| 在线黄色网页| av日韩免费电影| 一区二区三区四区电影| 亚洲欧美偷拍另类| 国产精品久久久久久久久免费丝袜 | 欧美电影免费观看高清| 无码精品国产一区二区三区免费| 不卡的av电影在线观看| 久久一二三四区| 精品少妇一区二区三区 | 热久久99这里有精品| 西瓜成人精品人成网站| 黄色一级在线视频| 91视频xxxx| 黄色一级视频免费看| 亚洲欧洲黄色网| 国产精成人品2018| 亚洲成人自拍| 久久精品国产99国产| 精品人妻伦九区久久aaa片| 91精品福利在线一区二区三区 | 精品人妻伦一二三区久| 亚洲成人动漫一区| 五月婷在线视频| 日本久久久a级免费| 国产精品探花在线观看| 日本www.色| 亚洲男帅同性gay1069| 亚洲第一天堂在线观看| 欧美激情视频一区| 日韩av午夜| 精品少妇无遮挡毛片| 中文字幕一区二区三区色视频| 国产一区二区三区中文字幕| 欧美乱妇40p| 日韩在线影视| 欧美日韩亚洲自拍| 亚洲精品国产无天堂网2021| 欧美特级特黄aaaaaa在线看| 5566成人精品视频免费| 欧美日韩在线观看视频小说| 色综合五月婷婷| 香蕉久久一区二区不卡无毒影院 | 国产免费久久久| 97久久精品在线| 波多野结衣在线观看一区二区| 日本中文字幕观看| 亚洲国产日韩精品| 福利成人在线观看| 亚洲xxx大片| 久久亚洲色图| 中文字幕在线2021| 国产手机视频精品| 国产精品免费精品自在线观看| 国产精品无码免费专区午夜| 久久这里只有精品视频网| 91麻豆成人精品国产| 91国产美女在线观看| 日韩在线观看电影完整版高清免费悬疑悬疑| 欧美午夜aaaaaa免费视频| 一区二区在线观看不卡| 嫩草研究院在线观看| 91精品视频在线看| 日韩精品国产精品| 国产精品第二十页| 日韩在线观看精品| 欧美中文一区|