精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

精品国产一区探花在线观看| 久久青草伊人| 福利一区福利二区| 欧美在线视频a| www.4hu95.com四虎| 日韩影片在线观看| 色中色一区二区| 在线观看18视频网站| 五月婷婷在线播放| 老司机精品视频在线| 海角国产乱辈乱精品视频| 加勒比精品视频| 外国成人毛片| 欧美日韩在线免费观看| 91看片淫黄大片91| 你懂的免费在线观看视频网站| 国产又粗又猛又爽又黄91精品| 欧美一区二粉嫩精品国产一线天| 国产少妇在线观看| 国内精品久久久久久99蜜桃| 精品久久久久久久久久久久包黑料| 久久久免费视频网站| 深夜国产在线播放| 国产精品国产三级国产普通话三级| 久久波多野结衣| 国产成人精品免费看视频| 日韩精品视频网| 97色伦亚洲国产| 久久久www成人免费毛片| 日本一区二区免费高清| 亚洲欧美色婷婷| 精品无码av一区二区三区| 黄色成人小视频| 欧美性猛交xxxx黑人猛交| 国产精品国产三级国产专区51| 永久免费在线观看视频| 久久精品一区蜜桃臀影院| 精品乱子伦一区二区三区| www.香蕉视频| 国产精品主播直播| 成人免费午夜电影| 伊人网视频在线| 久久综合九色| 午夜精品久久久久久久99热浪潮| 永久免费看黄网站| 欧美激情电影| 日韩亚洲综合在线| 精品在线观看一区| 久久电影院7| 中日韩美女免费视频网站在线观看 | a免费在线观看| 国产精品免费看片| 致1999电视剧免费观看策驰影院| av国产在线观看| 国产精品欧美一区喷水| 亚洲一区二区三区精品视频 | 欧美成人性色生活仑片| 999精品视频在线观看播放| 久久精品久久久| 欧美成人激情在线| 天天看片中文字幕| 国内久久视频| 69国产精品成人在线播放| 羞羞影院体验区| 久久激情视频| 国产精品天天狠天天看| 国产精品欧美综合亚洲| 国产精品69久久久久水密桃| aa成人免费视频| 天天干在线观看| 久久久不卡影院| 亚洲一区二区三区乱码| 精品国产白色丝袜高跟鞋| 亚洲另类一区二区| 精品无码国产一区二区三区av | 国产有码在线一区二区视频| 91福利在线观看视频| 国产成人综合亚洲91猫咪| 国产乱码精品一区二区三区中文 | 4p变态网欧美系列| 天天操天天干天天摸| 久久99精品久久久久婷婷| 99在线视频播放| 久久久久久久影视| 亚洲桃色在线一区| 国产精品50p| 另类一区二区三区| 精品福利一二区| 神马久久久久久久久久久| 在线精品国产| 2019最新中文字幕| 国产乱码精品一区二三区蜜臂| 国产a精品视频| 欧美日韩一区在线播放| 成人高清免费在线| 色综合中文综合网| 免费看三级黄色片| 精品一区二区三区中文字幕老牛| 欧美xxxx14xxxxx性爽| 亚洲免费黄色网址| 国产福利一区在线| 先锋影音网一区| xxxx成人| 91精品国产综合久久香蕉的特点| 亚洲中文字幕一区| 婷婷久久一区| 国产精品xxxxx| 亚洲av综合色区无码一区爱av| 久久久综合网站| www.国产在线视频| 欧美综合影院| 日韩电影网在线| 色哟哟一一国产精品| 香蕉国产精品偷在线观看不卡| 亚洲一区二区三区成人在线视频精品| 黄色电影免费在线看| 亚洲大尺度视频在线观看| 超碰超碰在线观看| 奇米狠狠一区二区三区| 欧美激情一二三| 国产免费av电影| 中文在线免费一区三区高中清不卡| 久久久亚洲国产精品| 国产美女精品视频免费播放软件 | 日本xxxxxxxxx18| 亚洲激情二区| 超碰97国产在线| 超碰最新在线| 宅男在线国产精品| 日韩av片在线免费观看| 日韩中文字幕区一区有砖一区 | 91社区在线| 色老汉一区二区三区| 国产精品久久AV无码| 激情婷婷欧美| 国产女人水真多18毛片18精品| 97caopron在线视频| 91精品福利在线一区二区三区| 成人性生交大片免费看无遮挡aⅴ| 亚洲综合精品四区| 久久久www免费人成黑人精品| 91福利区在线观看| 精品国产百合女同互慰| 国产一级aa大片毛片| 国产成人福利片| 中国丰满熟妇xxxx性| julia中文字幕一区二区99在线| 欧美激情网站在线观看| 丰满少妇在线观看bd| 亚洲成人动漫在线观看| 国产伦精品一区二区免费| 亚洲黄色av| 九九九九精品九九九九| 小视频免费在线观看| 亚洲精品国精品久久99热| 中文字幕一区二区三区精品 | 久久久久亚洲AV成人无在| 日本网站在线观看一区二区三区 | 91在线观看免费高清| 精品自拍一区| 精品美女一区二区| 国产精品视频久久久久久久| 久久这里只有精品首页| 成人性视频欧美一区二区三区| 欧美精品乱码| 国产日韩在线亚洲字幕中文| a视频在线观看| 精品国产凹凸成av人导航| 超碰中文字幕在线| 国产精品情趣视频| 久久久国产精品久久久| 一区二区三区国产在线| 欧美在线播放一区二区| 久久久久黄色| 久久久久久久久久亚洲| 欧美女优在线观看| 4438x亚洲最大成人网| 日本三级欧美三级| 国产欧美精品日韩区二区麻豆天美| 美女在线视频一区二区| 国产精品观看| 欧美最大成人综合网| www欧美在线观看| 97视频在线观看免费| 高清在线观看av| 精品久久久久久亚洲综合网| 中文字幕精品视频在线观看| 综合欧美一区二区三区| 久久久久9999| 国产一区视频导航| 国产男女无遮挡| 亚洲深深色噜噜狠狠爱网站| 免费成人看片网址| 国产高清日韩| 日韩美女在线观看| caopeng在线| 一区二区三区高清国产| 亚洲经典一区二区三区| 欧日韩精品视频| 日本少妇裸体做爰| 1024成人网| 亚洲最大成人网站| 国产成人精品亚洲日本在线桃色| 免费看a级黄色片| a91a精品视频在线观看| 影音先锋男人的网站| 欧美人与拘性视交免费看| 91成人在线看| 国产精品久久久久久久久免费高清| 久久久久久中文字幕| 麻豆系列在线观看| 国产一区二区黄| 四虎电影院在线观看| 日韩欧美一级精品久久| 中文在线资源天堂| 精品国产乱码久久久久久婷婷 | 宅男噜噜噜66一区二区| 午夜久久久久久久久久久| 欧美日韩中文一区二区| 久久av二区| 精品女人视频| 成人区精品一区二区| 成人综合日日夜夜| 国产欧美va欧美va香蕉在| 台湾佬成人网| 亲子乱一区二区三区电影| 成人性生交大片免费看在线播放| 久久精品久久久久久| 99re在线视频| 一区二区国产精品视频| 国产在线观看黄| 亚洲女成人图区| 欧美日本韩国一区二区| 精品网站999www| 五月婷婷六月色| 亚洲精品乱码久久久久久金桔影视| 亚洲精品一区二区三区四区| 日韩一区二区三区av| 国产熟女一区二区丰满| 日韩一区二区精品在线观看| 国产又粗又黄又爽的视频| 欧美日韩国产免费| 在线观看毛片视频| 欧美日韩精品一区二区天天拍小说 | 精品久久五月天| 国产日韩欧美中文字幕| 欧美一卡2卡三卡4卡5免费| 国产麻豆一精品一男同| 91精品午夜视频| www久久久久久| 精品国产在天天线2019| 欧美视频在线观看一区二区三区| 精品久久久久久久久久久久久久久久久| wwwav网站| 日韩精品视频中文在线观看| 日韩精品视频无播放器在线看 | 182tv在线播放| 九九热精品视频| 女囚岛在线观看| 91av视频在线播放| 国模冰冰炮一区二区| 国产精品成人国产乱一区 | 日韩三级在线观看视频| 亚洲欧美视频在线观看视频| 国产一级一级片| 精品久久中文字幕久久av| 自拍偷拍校园春色| 69堂精品视频| 日本免费一区视频| 亚洲视屏在线播放| 精品麻豆一区二区三区| 午夜精品久久久久久久99黑人| 婷婷午夜社区一区| 成人夜晚看av| 加勒比色老久久爱综合网| 日韩三级电影网站| 欧美一区二区三区久久精品| 欧美黑人经典片免费观看| 日韩福利视频导航| 日韩欧美色视频| 91香蕉视频污在线| 国产成人免费在线观看视频| 亚洲福利国产精品| 无码久久精品国产亚洲av影片| 欧美一级二级三级蜜桃| 青青久草在线| 久热精品在线视频| 香蕉视频亚洲一级| 91精品国产一区二区三区动漫| 欧美**字幕| 国产资源第一页| 天堂午夜影视日韩欧美一区二区| 亚洲天堂一区二区在线观看| 91在线国产福利| 青青草激情视频| 91黄色在线观看| 欧美一区二区黄片| 日韩中文字幕国产精品| 日韩脚交footjobhd| 91热精品视频| 亚洲素人在线| 天天做天天躁天天躁| 免费在线观看不卡| 亚洲精品激情视频| 国产精品乱码一区二区三区软件 | 久久男人天堂| 亚洲自拍偷拍区| 日韩国产一区二区| 国产精品无码av在线播放| 国产综合久久久久影院| 日本一级免费视频| 香蕉成人啪国产精品视频综合网| 97超碰资源站| 在线日韩欧美视频| 综合日韩av| 黄色91av| 激情久久综合| 性色av浪潮av| 最新成人av在线| 91丨九色丨海角社区| 精品亚洲一区二区三区在线播放| 手机在线免费观看av| 91深夜福利视频| 97国产成人高清在线观看| 少妇高清精品毛片在线视频| 99久久伊人网影院| 日韩福利片在线观看| 日韩美女天天操| 国产精品剧情一区二区在线观看| 国产欧美日韩中文字幕| 欧美一级精品片在线看| 国产精品99久久免费黑人人妻| 91在线国内视频| 欧美一区二区激情视频 | 3p在线观看| 国产精品成人观看视频国产奇米| 国产欧美一区| 黄色片视频在线播放| 久久精品水蜜桃av综合天堂| 依依成人综合网| 精品五月天久久| 成人国产二区| 欧美亚洲精品日韩| 日韩成人免费在线| 国产农村妇女精品一区| 欧美日韩一本到| 久cao在线| 成人写真福利网| 欧美激情综合色综合啪啪| 深夜做爰性大片蜜桃| 亚洲综合偷拍欧美一区色| 狠狠人妻久久久久久综合麻豆| 欧美激情亚洲一区| 欧美sss在线视频| 一本大道熟女人妻中文字幕在线 | 亚洲精品tv| 一道本在线观看视频| 国产福利精品一区二区| 精品无码久久久久久久| 日韩精品视频在线观看网址| 欧美一区 二区 三区| 亚洲欧美日韩综合一区| 狠狠色丁香久久婷婷综| 欧美成人aaa片一区国产精品| 欧美精品一区二区三| 天堂电影一区| 亚洲精品在线观看免费| 国产一区二区在线视频| 国产中文字幕免费| 亚洲男人天堂2023| 日韩深夜福利网站| 轻点好疼好大好爽视频| 久久综合九色综合欧美就去吻| 一区二区三区麻豆| 久久精品夜夜夜夜夜久久| 9国产精品午夜| 成年人视频在线免费| 亚洲婷婷国产精品电影人久久| 欧美熟妇另类久久久久久不卡 | 精品中文字幕乱| 婷婷亚洲成人| 国产成人美女视频| 性感美女极品91精品| 国产福利小视频在线| 97人人模人人爽人人喊38tv| 久久精品123| 国产精品成人免费观看| 亚洲另类xxxx| 日本在线一区二区三区| 国产成人综合一区| 亚洲乱码精品一二三四区日韩在线| 天堂在线视频免费观看| 国产免费观看久久黄| 亚洲国产电影| 熟女少妇a性色生活片毛片| 日韩福利在线播放| 亚洲在线资源| 中文字幕乱码人妻综合二区三区| 亚洲美女淫视频| 国产区在线视频|