亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

Pandas數(shù)據(jù)合并指南:concat與merge的選型、避坑與性能優(yōu)化

Pandas數(shù)據(jù)合并指南:concat與merge的選型、避坑與性能優(yōu)化 1. 為什么說合并數(shù)據(jù)是 Pandas 中最容易“掉坑”的操作在 Pandas 的日常使用里pd.concat和pd.merge可能是出現(xiàn)頻率最高的兩個函數(shù)。很多人對它們的理解停留在“一個用來上下拼接一個用來按列匹配”但實際用下來卻經(jīng)常被各種怪問題折磨——明明數(shù)據(jù)看起來差不多合并結(jié)果卻多出一堆重復(fù)行明明索引對得上concat卻給你生成了一堆NaN明明兩個表都干干凈凈merge之后內(nèi)存直接爆掉。我做數(shù)據(jù)分析這十幾年幾乎每周都會在社區(qū)或同事的代碼里看到類似的困惑。老實說這些問題絕大多數(shù)不是函數(shù)本身出了 bug而是我們對 Pandas 合并 API 的設(shè)計邏輯理解得不夠透徹。Pandas 提供concat、merge、join、combine_first等一系列看似功能重疊的接口背后其實是一套相當清晰的設(shè)計哲學(xué)每種操作對應(yīng)一個“數(shù)據(jù)拼裝”的語義場景選錯 API 或者用錯參數(shù)輕則結(jié)果不對重則性能雪崩。這篇文章我不打算只是羅列幾個示例然后說“這個能拼、那個能連”而是想從設(shè)計源頭把合并 API 拆開來講清楚為什么 Pandas 要設(shè)計這么多合并函數(shù)它們的邊界在哪高階場景下怎么選型以及我踩過的一些坑和排查思路。不管你是剛接觸 Pandas 的新手還是寫了很多年數(shù)據(jù)處理的老手我相信都能在里面找到一些值得琢磨的東西。2. 從“怎么拼數(shù)據(jù)”到“為什么這么拼”Pandas 合并 API 的設(shè)計哲學(xué)2.1 數(shù)據(jù)合并的三個底層語義對齊、連接與迭代要理解 Pandas 的合并 API先要跳出函數(shù)本身回到數(shù)據(jù)拼接的本質(zhì)。任何一次數(shù)據(jù)合并底層都逃不開三個問題數(shù)據(jù)在哪個方向上拼接依據(jù)什么條件匹配匹配不上的部分怎么處理Pandas 把這幾個問題拆解成了不同的 API而不是像有些工具那樣一個函數(shù)打天下這就是它的設(shè)計哲學(xué)所在。pd.concat解決的是“軸向拼接”問題——你可以把它理解成把幾沓紙按順序疊起來或者并排鋪開。它不關(guān)心兩張表的內(nèi)容是否有關(guān)聯(lián)關(guān)系只關(guān)心你要不要把它們放在同一個 DataFrame 里繼續(xù)處理。所以concat的核心邏輯是“對齊軸”通常是 index 或 columns而不是“匹配數(shù)據(jù)”。pd.merge解決的則是“關(guān)系連接”問題——類似 SQL 中的 JOIN它關(guān)注的是一張表的 key 如何在另一張表中找到對應(yīng)的行。這種操作天然帶有集合論的味道內(nèi)連接、外連接、左連接、右連接本質(zhì)上是數(shù)學(xué)上的交集、并集和差集。這兩個 API 看起來好像都在“合并數(shù)據(jù)”但實際上服務(wù)的是兩種完全不同的需求。很多人出錯正是因為把對齊當成了匹配或者把匹配當成了對齊。2.2 為什么有了 merge 還需要 concat合并的對象完全不同一個常見的誤區(qū)是認為merge是concat的“高級版”。真不是這樣。這兩者的區(qū)別用一句話概括就是concat合并的是“結(jié)構(gòu)相同或相似”的數(shù)據(jù)merge合并的是“鍵相同但結(jié)構(gòu)互補”的數(shù)據(jù)。舉一個生活中的例子。假設(shè)你手上有兩份名單一份是 2023 年銷售冠軍名單一份是 2024 年銷售冠軍名單。你想把兩年的名單放在一起做一個總表這時候用concat就很自然——它們行數(shù)不同、內(nèi)容不同但列結(jié)構(gòu)完全一樣你要做的只是把第二個 DataFrame 接到第一個下面。反過來如果你手上有一份員工基本信息表和一份每個員工對應(yīng)的業(yè)績表兩份表的列完全不同但都包含“員工編號”這一列你想把兩邊的信息合并到一張表里這時候就該用merge——它是按員工編號去“對齊”行然后把兩邊的列拼到一起。順著這個思路往下走你會自然地發(fā)現(xiàn)一個更深層的問題concat只要求“軸向結(jié)構(gòu)一致”而merge要求“鍵的值能對上”。操作意圖完全不同API 自然也就不能互相替代。Pandas 在設(shè)計上遵循的就是“一個函數(shù)對應(yīng)一種聚合語義”的理念搞清楚自己當前要的是哪種語義比死記參數(shù)要有效得多。2.3 數(shù)據(jù)合并不是一個動作而是一整套操作族Pandas 里的合并 API 其實是一個操作族。除了大家最熟悉的concat和merge還有 DataFrame 自帶的join方法本質(zhì)上是 merge 的特化場景、combine_first用一張表填充另一張表的缺失值、update原地修改部分數(shù)據(jù)、compare對比差異等。我見過不少資深數(shù)據(jù)分析師也未必能把每個函數(shù)都叫得上名但實際上這些操作之間是有脈絡(luò)的join是“按索引合并”的便捷入口combine_first是“位置對齊后補缺失”的合并update則是“位置對齊后覆蓋非缺失值”的合并。它們都基于同一個底層的對齊機制卻在面向的場景上做了細分。設(shè)計上的這種“細分”帶來的好處是讀者看到你的代碼能通過你用的函數(shù)一眼知道你當時的處理意圖。代碼的意圖表達力本身就是一種生產(chǎn)力。所以在正式展開concat和merge之前我想先立一個結(jié)論合并 API 的選擇首先不是性能問題而是語義問題。把語義選對了后面的參數(shù)配置才是順水推舟的事。3. pd.concat 與 pd.merge 核心差異什么時候用哪個3.1 pd.concat 的完整機制不止是“直接拼起來”pd.concat最基礎(chǔ)的用法是把多個 DataFrame 按行堆疊一行代碼就能完成。但你真的理解它在堆疊時做了什么嗎我拆開來說。import pandas as pd df1 pd.DataFrame({id: [1, 2], value: [a, b]}) df2 pd.DataFrame({id: [3, 4], value: [c, d]}) pd.concat([df1, df2])上面這段的結(jié)果是得到一個 4 行 2 列的表這沒問題。但如果你把df2的列名改一下比如把value改成score再用同樣的代碼呢結(jié)果會變成一個 4 行 3 列的表多出來的一列全是NaN。因為concat在默認參數(shù)joinouter下會對軸對齊做“并集”——列名對不上的部分用缺失值填充。這個行為對新手來說經(jīng)常是“驚喜”但它其實是精心設(shè)計的。Pandas 認為你在做軸向拼接時可能遇到結(jié)構(gòu)不完全一致的數(shù)據(jù)比如不同月份的報表字段有小差異與其直接報錯不如保留所有列信息讓你自己決定怎么處理。如果你想嚴格一點只保留兩邊都有的列把joininner就行pd.concat([df1, df2], joininner)還有一個容易忽略的參數(shù)是ignore_index。很多時候我們并不關(guān)心拼接后每一行原來的索引是什么尤其是在做批量文件讀取再合并的場景。如果不設(shè)ignore_indexTrue結(jié)果 DataFrame 的索引可能是一段 0 1 0 1 這樣重復(fù)的序列后續(xù)做loc或者reset_index都會很別扭。pd.concat([df1, df2], ignore_indexTrue)這樣索引就會重新變成 0 1 2 3干干凈凈。3.2 pd.merge 的匹配邏輯鍵、連接方式和多鍵合并merge的設(shè)計核心是“鍵”。它不像concat那樣按軸位置或名稱對齊而是按你指定的列或索引的值去匹配行。left pd.DataFrame({key: [A, B, C], left_value: [1, 2, 3]}) right pd.DataFrame({key: [B, C, D], right_value: [4, 5, 6]}) pd.merge(left, right, onkey)默認howinner結(jié)果是keyleft_valueright_valueB24C35只保留能匹配上的行這就是內(nèi)連接。如果你想要保留 left 中所有行不管它能不能在 right 中找到對應(yīng)值用howleft。同理howright保留 right 的所有行howouter保留兩邊的所有行匹配不上的部分填充為NaN。這里有個值得細說的點當 left 或 right 中的 key 存在重復(fù)值時merge會產(chǎn)生笛卡爾積式的行爆炸。比如 left 中 A 出現(xiàn)兩次right 中 A 出現(xiàn)三次合并后 A 的行數(shù)就是 2×36 行。這個概念非常重要因為在數(shù)據(jù)清洗場景中key 的重復(fù)是常態(tài)而一旦你忽略了這一點結(jié)果表的行數(shù)會莫名其妙地暴漲排查起來相當費勁。left pd.DataFrame({key: [A, A, B], left_value: [1, 2, 3]}) right pd.DataFrame({key: [A, A, A, B], right_value: [10, 20, 30, 40]}) pd.merge(left, right, onkey)這個結(jié)果會有 2×317 行。如果你沒有在合并前確認 key 的唯一性這個行為會直接帶偏后續(xù)所有的統(tǒng)計結(jié)果。3.3 一張表理清 concat 與 merge 的選型我把它們的差異整理成了一張對照表方便你在實際中快速做判斷。對比維度pd.concatpd.merge拼接方向軸方向默認行拼接可設(shè)axis1做列拼接無方向概念按 key 匹配行匹配依據(jù)索引或列名軸標簽指定列的值或索引連接類型outer默認/ innerinner / left / right / outer列合并方式取并集或交集不產(chǎn)生列的分組重構(gòu)合并指定 key 列之外的所有列重復(fù) key 行為直接堆疊不產(chǎn)生笛卡爾積可能產(chǎn)生笛卡爾積需格外謹慎典型場景多表結(jié)構(gòu)相同批量堆疊兩張表通過業(yè)務(wù)鍵補充字段選型的判斷口訣很簡單結(jié)構(gòu)相加用concat字段互補用merge。如果你是要把幾個月的數(shù)據(jù)文件讀進來合成一個大表concat就夠了如果你要做的是維表映射、明細表關(guān)聯(lián)繞不開merge。4. 高階實踐一索引合并與多級索引的坑4.1 join 方法與 merge 的關(guān)系索引就是隱藏的 keyDataFrame 自帶的join方法本質(zhì)上是merge的一種便捷形式但它有一個非常鮮明的特點——默認按索引匹配而不是按列匹配。也就是說join是merge的“索引接口”。df1 pd.DataFrame({value1: [1, 2]}, index[a, b]) df2 pd.DataFrame({value2: [3, 4]}, index[a, c]) df1.join(df2)上面這段代碼的結(jié)果是value1value2a1.0b2.0因為索引 a 在兩邊都有而 b 只在 df1 中c 只在 df2 中默認左連接時 b 行的 value2 就是 NaN。為什么這個設(shè)計值得重視因為在很多真實業(yè)務(wù)里時間序列數(shù)據(jù)或者按某種結(jié)構(gòu)化標簽組織的數(shù)據(jù)索引本身就是業(yè)務(wù)鍵。比如你有一批按日期為索引的指標數(shù)據(jù)想和另一批同樣按日期為索引的元數(shù)據(jù)合并用join會比先 reset_index 再 merge 干凈得多而且省去了一次不必要的索引重置操作。但join也有個容易踩的坑當兩邊索引不是唯一值時它同樣會產(chǎn)生笛卡爾積而且因為索引重復(fù)往往更隱蔽更容易讓人忽略驗證。4.2 多級索引MultiIndex的合并細節(jié)多級索引的合并是我在實際項目中反復(fù)打磨過的一個場景。如果你有兩個 DataFrame索引都是兩層比如“城市”“日期”想對這兩層索引做合并merge要專門指定on為多層索引名join則要配合on參數(shù)使用。left pd.DataFrame( {value: [1, 2, 3]}, indexpd.MultiIndex.from_tuples([(北京, 2024-01-01), (北京, 2024-01-02), (上海, 2024-01-01)]) ) right pd.DataFrame( {score: [10, 20, 30]}, indexpd.MultiIndex.from_tuples([(北京, 2024-01-01), (上海, 2024-01-01), (上海, 2024-01-02)]) ) left.join(right)上面的例子中只有當兩個 DataFrame 的 MultiIndex 層級命名和順序完全一致時join才能直接生效。否則你要么先reset_index()把 MultiIndex 變成普通列再 merge要么顯式指定on參數(shù)。實操心得我在處理帶時間維度的數(shù)據(jù)時更傾向于先 reset_index 再 merge而不是強行用 MultiIndex 對齊。原因很簡單reset 之后 key 變成普通列后續(xù)做篩選、分組、透視都更方便而且踩坑概率顯著降低。多級索引讓數(shù)據(jù)在直觀上更緊湊但代價是很多操作符的行為會變得隱晦調(diào)試成本上漲。如果只是臨時用一次索引做 merge那沒問題一旦數(shù)據(jù)要經(jīng)過多步處理我的建議是盡早把索引降維成普通列。4.3 合并后索引失序的處理技巧merge之后結(jié)果 DataFrame 的索引默認是 0 到 n-1 的整數(shù)序列但如果你使用了join或者合并時指定了某些 index 參數(shù)索引可能變得混亂。很多人喜歡立刻執(zhí)行reset_index(dropTrue)把隱藏的索引包袱徹底丟掉。其實這里有個更省事的習(xí)慣如果你確定合并后不想保留任何索引信息直接在merge之前就把兩邊的索引 reset 掉然后只用普通列作為on的 key。這套流程非常機械但不容易出錯。我見過太多人把索引留著merge 之后索引列和業(yè)務(wù)列混在一起后續(xù)還要小心翼翼地選列。與其糾結(jié)不如一開始就“索引歸索引、列歸列”地整理好。5. 高階實踐二列沖突、重復(fù)列與 validate 校驗5.1 suffixes 參數(shù)合并后列名沖突的藝術(shù)merge有一個讓人又愛又恨的行為如果左右兩個 DataFrame 除了 key 之外還有其他同名但不相同的列合并后這些列會被自動加上_x和_y后綴。這就是suffixes參數(shù)的默認值(_x, _y)。left pd.DataFrame({key: [1, 2], value: [10, 20]}) right pd.DataFrame({key: [1, 2], value: [100, 200]}) pd.merge(left, right, onkey)結(jié)果會變成value_x和value_y。這本身很合理但實際工作中列名沖突往往不止發(fā)生在“value”這種泛化名字上還可能發(fā)生在“amount”“count”“score”等一堆業(yè)務(wù)字段上。如果你不提前規(guī)劃合并出來的表會有一堆_x和_y后綴讀起來非常痛苦。我的建議分兩步走第一在合并前明確要保留哪些列通過left.columns和right.columns的差集來判斷是否會產(chǎn)生沖突。第二用suffixes參數(shù)主動給沖突列命名比如pd.merge(left, right, onkey, suffixes(_計劃, _實際))第三如果列特別多或者沖突很嚴重干脆把其中一方的業(yè)務(wù)列 rename 掉再合并。比如銷售數(shù)據(jù)里把 A 表的amount改成amount_2023B 表的amount改成amount_2024合并后直接就是帶年份的區(qū)分名。這個方案在結(jié)果清晰度上是最優(yōu)的。5.2 validate 參數(shù)你與數(shù)據(jù)質(zhì)量之間的一道保險絲validate可能是 Pandas 合并 API 中最被低估的參數(shù)。它能幫你校驗合并前后 key 的基數(shù)關(guān)系在數(shù)據(jù)質(zhì)量檢驗環(huán)節(jié)中相當于一道保險絲。pd.merge(left, right, onkey, validateone_to_one)可選的參數(shù)值有validate 值含義適用場景one_to_one左右兩邊的 key 都必須唯一主鍵關(guān)聯(lián)主鍵one_to_many左邊 key 唯一右邊可以重復(fù)事實表關(guān)聯(lián)維度表左邊唯一many_to_one右邊 key 唯一左邊可以重復(fù)維度表映射many_to_many兩邊都可以重復(fù)默認不校驗不確定基數(shù)時的寬松模式我在實際項目中幾乎每次 merge 都會帶上 validate 參數(shù)除非我明確知道本次合并就是 many_to_many 關(guān)系。這不是強迫癥而是因為 merge 的笛卡爾積效應(yīng)太隱蔽了——如果你不做校驗一個重復(fù) key 就能讓結(jié)果行數(shù)翻幾倍而且這種錯誤往往不會報錯只會默默地污染你后續(xù)所有統(tǒng)計結(jié)果。加了 validate等于讓 Pandas 在合并前幫你做一次數(shù)據(jù)質(zhì)量斷言任何意外重復(fù)都會立刻 expose 出來。一個真實的教訓(xùn)我曾經(jīng)處理過一個用戶點擊日志表和用戶信息表的合并因為日志表的 user_id 天生就是重復(fù)的結(jié)果跑出來的結(jié)果比預(yù)期多了幾十萬行。排查了幾個小時最終定位到是底層表里 user_id 有重復(fù)而且因為重復(fù)模式不均勻?qū)е履承?user 的行數(shù)被放大得格外夸張。如果當時 merge 時隨手加個validatemany_to_one這個問題在第一時間就會被捕獲根本不用做那么長時間的“排雷”。5.3 合并完成后列順序的管理merge之后列的順序也有講究。默認是 key 列排在最前面然后左邊剩余列再右邊剩余列。這個順序在大多數(shù)場景下沒問題但如果你要輸出到 Excel 或者做進一步的可視化列順序往往直接影響到表的可讀性。我習(xí)慣在 merge 之后顯式地重新排列列順序result pd.merge(left, right, onkey, validateone_to_one) result result[[id, province, city, date, metric_value, metric_target]]這一步看起來只是“整理”但它強制你重新審視合并后的列結(jié)構(gòu)能順便發(fā)現(xiàn)一些不該出現(xiàn)的列比如_x/_y殘留相當于多了一次自查的機會。6. 高階實踐三多表合并與性能優(yōu)化6.1 鏈式 merge 與 reduce 模式在實際的數(shù)據(jù)管道中很少只有兩張表參與合并。常見的模式是一張主表加上多張維表你想一次性把維表字段都 attach 到主表上。最簡單的寫法是鏈式 mergedf df_main.merge(df_dim1, onkey1, howleft, validatemany_to_one) df df.merge(df_dim2, onkey2, howleft, validatemany_to_one) df df.merge(df_dim3, onkey3, howleft, validatemany_to_one)這種寫法直觀代碼可讀性也不錯但問題在于它有一些隱藏開銷每次 merge 都會生成一個完整的中間 DataFrame如果主表行數(shù)很大千萬級別多輪 merge 會占用大量臨時內(nèi)存。一種更省內(nèi)存的做法是使用functools.reduce一次性把多個 DataFrame 歸并from functools import reduce df_merged reduce( lambda left, right: pd.merge(left, right, onkey, howleft, validatemany_to_one), [df_main, df_dim1, df_dim2, df_dim3] )不過說實話我在生產(chǎn)環(huán)境中更傾向于“小步 merge”而不是強行塞進 reduce。原因有兩點一是鏈式 merge 可以在每步之間插入日志、斷言和計數(shù)檢查方便定位哪一步出了問題二是 reduce 雖然看著優(yōu)雅但一旦某個維表的 key 有重復(fù)錯誤信息會和后面幾步裹在一起排查難度顯著增大。性能優(yōu)化很重要但可維護性同樣重要。我的折中方案是如果維表數(shù)量在 2 到 4 張且主表行數(shù)在百萬級別鏈式 merge 足夠如果維表數(shù)量超過 5 張或者主表特別大那就換用 reduce 或先把維表轉(zhuǎn)成字典用 map 映射。6.2 用字典映射替代 merge當只有一列需要映射時有時候你根本不需要 merge 一整張維表你只是想把某一列的值根據(jù)另一張表的映射關(guān)系“翻譯”成新的一列。這種場景用map或replace比merge高效得多。city_map df_city_info.set_index(city_id)[city_name].to_dict() df[city_name] df[city_id].map(city_map)這個操作的復(fù)雜度是 O(n) 的字典查找而merge需要做哈希連接并生成新的 DataFrame開銷要大得多。當主表行數(shù)是幾百萬行、映射表只有幾千行時map方案通常能快一個數(shù)量級內(nèi)存占用也小得多。我把這種方法稱之為“輕量映射”因為它只解決“單列補全”的需求。同理如果你想根據(jù)某個 code 映射出一個等級、一個分組名、一個負責人等都可以先構(gòu)建一個 dict再map上去。這比每次都圍著 merge 轉(zhuǎn)要靈活得多代碼也更簡潔。6.3 大數(shù)據(jù)量下的合并策略分塊、類型壓縮與內(nèi)存預(yù)估當你需要合并的表非常大比如單個 DataFrame 已經(jīng)超過內(nèi)存的 30%就要開始考慮性能策略了。這里我必須強調(diào)Pandas 的 merge 在數(shù)據(jù)量大時的主要瓶頸不是 CPU而是內(nèi)存。合并過程中會構(gòu)建哈希表加上中間結(jié)果和復(fù)制操作內(nèi)存峰值可能達到原始數(shù)據(jù)的好幾倍。我常用的優(yōu)化手段有四個第一合并前先篩選列。只保留參與合并的 key 列和最終有用的業(yè)務(wù)列把那些無關(guān)的大文本列、冗余列先 drop 掉減少內(nèi)存里的數(shù)據(jù)量。第二數(shù)據(jù)類型壓縮。把object類型的列轉(zhuǎn)成category把int64降成int32甚至int16把float64降成float32。這一套操作對內(nèi)存的節(jié)省非??捎^尤其是在列數(shù)多、行數(shù)大的場景下。for col in df.columns: if df[col].dtype object: df[col] df[col].astype(category)第三分塊 merge。如果主表實在太大可以按 key 的某個維度拆塊每一塊分別 merge 之后 concat 到一起。這個辦法雖然代碼稍微復(fù)雜但能把內(nèi)存峰值控制在一個可控范圍內(nèi)。第四如果可以優(yōu)先用merge的left連接并且把右表去重。右表的 key 如果唯一哈希表會更小merge 也更快。如果右表有充足的內(nèi)存空間可以先drop_duplicates。另一個容易被忽視的點合并前對 key 列做排序不一定能加速 merge但如果你在 merge 之后還需要按 key 排序反而可以先 sort 再 merge讓結(jié)果直接有序。這樣省掉一次全局排序?qū)罄m(xù)輸出很友好。7. 合并后的數(shù)據(jù)質(zhì)量檢查與常見問題速查7.1 合并結(jié)果的三個黃金檢查點無論用concat還是merge合并完成之后我都會執(zhí)行三個檢查步驟幾乎成了肌肉記憶第一行數(shù)是否符合預(yù)期。如果是 left 連接結(jié)果行數(shù)等于 left 的行數(shù)如果是 inner 連接行數(shù)應(yīng)該小于等于兩個表去重匹配后的行數(shù)。任何超出預(yù)期的行數(shù)變化都是危險的信號。assert len(result) len(left), f行數(shù)異常: {len(result)} vs {len(left)}第二key 是否真的能對上。檢查 join 前后是否有 NaN 或異常重復(fù)。missing result[result[right_key].isna()]如果是左連接missing 里的行就是 left 中沒匹配上的部分要判斷這些行是否符合業(yè)務(wù)預(yù)期。第三字段是否完整。檢查合并后有沒有出現(xiàn)不應(yīng)該出現(xiàn)的_x/_y列檢查最終列數(shù)是否和預(yù)期一致。這一步能快速捕獲 columns 沖突和 suffixes 設(shè)置不當?shù)膯栴}。7.2 常見問題速查表我整理了下面這個速查表很多問題你會覺得眼熟因為它們大多來自我自己的錯誤案例。問題現(xiàn)象可能原因排查與解決合并后行數(shù)暴漲key 有大量重復(fù)觸發(fā)了笛卡爾積合并前對 key 做duplicated()檢查加上validate參數(shù)concat 后多出很多 NaN列名不完全一致默認 outer join 取并集檢查 columns 差異用joininner或先統(tǒng)一列名merge 后出現(xiàn)_x/_y列兩側(cè)有同名但不同內(nèi)容的列提前 rename 或使用suffixes明確命名join 操作報錯或結(jié)果不對索引沒有對齊或索引有重復(fù)先reset_index()或檢查索引唯一性左連接匹配后右表字段全 NaN右表的 key 列值和 left 不完全一致包含空格或類型不同檢查兩邊的 key 類型和去空格用strip()清洗merge 內(nèi)存直接爆掉數(shù)據(jù)量大且列多哈希表開銷大分塊 merge、壓縮數(shù)據(jù)類型、先篩選列concat 后 index 是重復(fù)的沒有設(shè)置ignore_indexTrue若不需要保留原索引設(shè)置ignore_indexTrue合并后字段順序雜亂默認按 key 加兩側(cè)列順序排列合并后手動指定列順序第三行里那種“兩邊 key 看起來一樣但匹配不上”的情況最容易讓人崩潰。我遇到過一例兩邊都是字符串形式的 ID但因為一邊是從 Excel 讀的帶了不可見字符另一邊是從數(shù)據(jù)庫導(dǎo)出的干凈字符串怎么 merge 都是 NaN。檢查了很久才發(fā)現(xiàn)數(shù)據(jù)里藏著換行符。對策是先在 key 列上執(zhí)行astype(str).str.strip()再統(tǒng)一數(shù)據(jù)類型基本能排除絕大多數(shù)“假不匹配”問題。7.3 合并性能與內(nèi)存的典型瓶頸定位如果你發(fā)現(xiàn)合并特別慢不要急著懷疑 Pandas 的性能先做兩件事一是確認數(shù)據(jù)量二是確認列數(shù)。很多時候慢的根本原因是右表太大導(dǎo)致哈希索引構(gòu)建耗時而你可能根本用不到右表的全部列。另一個常見瓶頸是數(shù)據(jù)類型不統(tǒng)一——object類型會比category或定長數(shù)值類型慢得多因為比較的開銷完全不同。內(nèi)存瓶頸的判斷稍微麻煩一點。一個簡單的方法是在 merge 前后用df.memory_usage(deepTrue)對比峰值。如果你發(fā)現(xiàn)合并后的內(nèi)存遠大于兩組數(shù)據(jù)之和那大概率是發(fā)生了笛卡爾積式的行擴張或者列沖突導(dǎo)致結(jié)果表包含了大量冗余列。這兩種情況都值得停下來好好審視合并策略。如果數(shù)據(jù)量到了“無論如何優(yōu)化內(nèi)存都不夠”的程度我會果斷換用polars或者干脆把數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫里做 JOIN不再硬磕 Pandas。工具選型不重要能解決業(yè)務(wù)問題才是第一位的。8. 一個完整的實戰(zhàn)案例多表關(guān)聯(lián)的數(shù)據(jù)清洗流程8.1 場景描述假設(shè)我們有一個電商訂單明細表orders包含列order_id、user_id、product_id、order_amount、order_date。另有一張用戶維表users包含列user_id、user_region、register_date。還有一張商品維表products包含列product_id、product_name、category、price。需求是生成一張“訂單分析寬表”包含每個訂單的用戶地域、商品名稱和類別最終輸出一份按地域、類別匯總的銷售額報表。8.2 第一步清洗與類型統(tǒng)一先對orders做基礎(chǔ)清洗確保user_id和product_id都是字符串類型且沒有多余空格orders[user_id] orders[user_id].astype(str).str.strip() orders[product_id] orders[product_id].astype(str).str.strip() users[user_id] users[user_id].astype(str).str.strip() products[product_id] products[product_id].astype(str).str.strip()這個步驟看起來瑣碎卻是我處理一切外部數(shù)據(jù)的第一步也是 merge 能正常工作的基礎(chǔ)。8.3 第二步維表預(yù)檢與合并在真正 merge 之前先檢查維表的 key 是否有重復(fù)assert users[user_id].is_unique, 用戶維表 user_id 存在重復(fù) assert products[product_id].is_unique, 商品維表 product_id 存在重復(fù)通過斷言后再執(zhí)行兩次左連接df_wide orders.merge(users, onuser_id, howleft, validatemany_to_one) df_wide df_wide.merge(products, onproduct_id, howleft, validatemany_to_one)這里validatemany_to_one的意思是左表訂單的 user_id 可以重復(fù)但右邊的維表 key 必須唯一。如果維表里有重復(fù) key這條語句會直接拋異常等于在源頭攔住臟數(shù)據(jù)。8.4 第三步合并后檢查與匯總合并完成后檢查是否有未匹配上的訂單unmatched_user df_wide[df_wide[user_region].isna()] unmatched_product df_wide[df_wide[product_name].isna()]如果這兩部分不為空說明訂單里存在用戶維表或商品維表沒有覆蓋的記錄。根據(jù)業(yè)務(wù)規(guī)則這類記錄要么保留并標記為“未知”要么直接剔除。保留時我習(xí)慣做一層填充df_wide[user_region] df_wide[user_region].fillna(未知) df_wide[product_name] df_wide[product_name].fillna(未知商品)最后按地域和類別做匯總summary df_wide.groupby([user_region, category], as_indexFalse)[order_amount].sum()這個案例完整走下來你就能看到合并 API 在真實業(yè)務(wù)鏈路中的定位它不只是把兩張表拼在一起而是圍繞數(shù)據(jù)質(zhì)量保證、鍵一致性檢查、缺失值處理的一整套流程。如果第一步和第二步做得夠穩(wěn)第三步基本就是水到渠成。8.5 為什么這個流程值得復(fù)制很多人寫數(shù)據(jù)管道習(xí)慣把 merge 當作一個“瞬間動作”合并完就立刻去做統(tǒng)計中間完全不做檢查和校驗。這種做法的風(fēng)險在數(shù)據(jù)量小的時候不明顯一旦數(shù)據(jù)量大到無法人為抽查任何底層數(shù)據(jù)的質(zhì)量問題都會在統(tǒng)計結(jié)果層面被放大。我上面這套流程的本質(zhì)是把 merge 前面加上“類型統(tǒng)一、重復(fù)檢查”merge 后面加上“匹配率檢查、缺失值標記”讓每一步都有跡可循。這套方法論比任何一個單獨的 API 技巧都重要。9. 一些個人的經(jīng)驗與最終提醒在我自己的項目中合并 API 的選擇已經(jīng)成了一種近乎本能的決策過程。數(shù)據(jù)來了先看結(jié)構(gòu)是否同質(zhì)同質(zhì)就concat再看是否有業(yè)務(wù)鍵需要關(guān)聯(lián)有關(guān)聯(lián)就用merge如果只是索引對齊就join如果只是補一列映射就map。這個決策鏈非常簡單但它能幫我把 90% 的合并需求在三秒內(nèi)歸位剩下的 10% 才是真正需要設(shè)計的地方。如果說有什么想特別強調(diào)的那就是不要迷信單一的 API。merge不是萬能的concat也不是只有“上下拼”這一個用途。Pandas 的合并 API 之所以看起來冗雜是因為數(shù)據(jù)合并本身就是一門關(guān)于對齊、匹配和容錯的學(xué)問。你用得越深越會發(fā)現(xiàn)所謂的“API 選型”其實是在一個大的語義框架下做決策。最后分享一個小技巧當你對某個合并行為不確定時建一個只有三五行的小例子跑一遍看看索引、行數(shù)、列名、NaN 分布是否符合預(yù)期。這個習(xí)慣能幫你避免無數(shù)個小時的排錯時間。Pandas 的返回值是透明的小例子會把它的行為方式完完整整地展示給你——剩下的就是你把這種“確定感”搬到真實的大數(shù)據(jù)上。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
热热色青青草| 久久久久久久久久久久久久久性生活视频 | 爱爱啊啊啊| 欧美色图 人妻| 欧美一级黄片免费播放| 日va操| 成人国产二区三区在线,男女精品。| 色婷婷aV一区二区三区麻豆综合| 欧美午夜一区二区三区| 伊人久久在线视频观看| 丁香五六月啪啪| 人人摸人人舔一区二区| 成人熟女视频一区二区三区| 亚欧美天堂在线| 超碰人人干| 亚洲小电影免费涩涩成人在线高清| 久久久性爱| 999 久久久| 亚洲成人一二三区| 97久久久久久久精| 欧美色图片91| 久操99| 久久极品一区二区| 婷婷五月色| 强奸乱伦Av网| 超碰九色| 日韩欧美女优电影| 婷婷伊人一区| 天天综合亚在线| 国产精品免费视频人成| 久久人人看| 极品尤物女神在线观看| 日本一区二区不卡精品| 久久肏大逼| 一区二区三区探花在线观看| 久久九九视频九九视频| 亚一综合久久久久久久久久| JULIA一区二区三区在线播放| 99老司机精品视频在线观看| 色哟哟综合| 97AV在线观看| 岛国片在线播放| 人人操人人操人人操人人操人人操人人人11.CM| 激情 欧美 亚洲 小说| 亚洲欧美91√| 欧美,日韩,中文,另类| 亚洲熟女乱综合一区二区三区| 美女裸体麻豆天美蜜桃91| 美女啊啊啊啊pc| 黄色小说亚洲| 欲射影视| 四虎精品一区| 麻豆视频国产一区二区| 亚洲无吗在线视频| 亚洲五月婷| 99精品久久久久久久婷婷蜜桃| 啊视频在线| 欧美劲爆视频一区二区| 91 刺激在线| 麻豆性爱视频在线播放| 99re在线视频国产| 亚洲第一页色网| 97碰碰色| 国内偷自视频区视频综合| 国产9 9在线 | 亚洲| 国产AV精久久| 激情五月综合| 天天看特黄的免费网站| 中文字幕av一区二区三区人妻少妇| 9久9久| 92性色国产午夜福利在线661| 久久社区一区二区三区| 啊啊啊啊啊啊好多水| 欧美999| 波多野42部无码喷潮在线观看| 久干9操| 天天综合在线4| 91 综合 色| 极品色综合| 中国一级特黄大片护士| 日韩在线视频1234| 97操97干| 强奸乱伦资源| 色诱avtt| 一区二区三区高清 | 欧美亚性天堂| 亚洲欧美小说| 狠狠操狠狠爱| 极品少妇久久久久| 亚洲天堂中文字| 久久女人一区二区三区| wuyechaopeng| 91九色首页| 男人网站婷婷| 操国产逼| 人人爽天天爽| 精品九九九九| 无码99| 97天天插| 日本精品第一视频在'| 先锋音影AV| 超碰在线一区二区三区| 天天操夜夜操| 精品免费囯产一区二区三区| 婷婷亚洲五月***久久| 日韩 成人 有码| 成人a v在线播放免费| av九九| 亚洲。天堂。日本在线观看| 国产成人无码啪| 婷婷综合在线观看| 岛国在线免费视频| 偷拍亚洲情色| 欧美综合站| 精品人妻一区二区三区视频在线| 天天插天天射| 亚洲欧美洲综合| 成人免费福利在线观看| 东京男人天堂| 夜夜一区二区| 91视频在线观看18| 天天影视网综合少妇| 91n处女在线观看| 女人高潮大叫一级毛片| 999999精品| 九九热九九热| 亚洲av综合伊人久久| 亚洲老司机123专区| 免费看片黄| se,,,亚洲欧美| 天天艹天天日| 色偷偷综合91久久噜噜| 先锋精品av色鲁| 青青草大香蕉视频| 天天综合网久久ww| 综合欧美日韩在线观看| 偷拍 亚洲 欧美| 人妻天天爽夜夜爽爽| 91丝袜| 九九玖玖精品| 99热综合| 91精品丝袜久久久久久| 日韩综合色图| 大香蕉欧美国产日韩高潮| 中文字幕高清精品一区| 91女优在线观看| 思思热在线视频精品| 精品国产乱码久久久久久网站入口| 熟妇熟女视频一区二区三区| 欧美gv在线观看| 欧美超碰人妻97| 91一区二区| 6080YYY午夜理论片在线观看| 中文字幕乱偷人妻久久艾草网| 另类小色呦| 超碰九7免费| 色网在线| 99re6久热只有精品6在线直播 | 日韩久久三区| 日本成人A片网站| 欧美午夜视频| 精品人妻1237| 自拍鲍鱼一区在线高清观看免费| 中文字幕精品探花视频| 四虎av在线| 欧美中文字幕一区 | 夜夜嗨一区| 蜜奶av| 色爱三区| www.91理论| 加勒比综合88| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 自拍欧美| 国产精品久久久久久久久久久久久久久久| 超碰97男女| 台欧久久精品视频| 久久久久婷婷| 国产精品视频一区二区三区八戒| 精品国产乱码久久久久久蜜臀| 99xav| 天天综合在线4| 日本三级网页| 精品成人亚洲午夜电影| 少妇综合| 97在线看| 久久久久久九九九| 97亚洲色图| 在线播放中文字幕| 亚洲性综合| 青青青青草av在线观看| 神马午夜久久久| 天堂九九九九九九九九九| 欧美在线观看综合国产| 欧美精品自慰系列寂寞少妇| α√在线| 青娱乐日韩无码| 大香网站| 亚洲图片欧美在线视频| 亚洲最新a在线观看| 国产精品久久久久久久AV大片| 色姑娘综合网| 伊人专区一区二区三区| 岛国1区2区3区在线观看| 天天综合网在线91| 天天综合官网| AV麻豆免费一区| 国产精品扒开腿做爽爽爽视频| 国产精品久久久午夜夜伦鲁鲁| 成人精品一区二区三区| 九九热这里只有在线精品视 伊人草 成人菠萝蜜视频在线观看 | 久久久熟妇熟女国产| 人妻少妇av在线观看| 一本精品日本在线视频精品 | 99色天堂| 婷婷丁香五月综合| 欧美三级不卡| 97综合在线观看| 91人妻视频在线| 人妻精品综合中文字幕在线| 国内精品不卡无毒99999| 麻豆2区1区天美| 啊啊啊用力在线观看| 国产suv精品一区二区四| 天天影视网综合少妇| 伊人天堂在线| 国产久久日韩网站导航| 国产精品69久久久久孕妇欧美| 亚州男人的天堂| 91狠狠狠| 丁香色狠狠色综合久久小说| 亚洲图片色图欧美另类 | 亚洲人码13| 国产少妇内射| jazzjazz国产精品麻豆| 无码精品一区二区三区潘金莲| 午夜福利免费福利视频| 日日干夜夜干| a人欧美综合天堂麻豆| 另类专区加勒比| 天天摸天天操视频| 噜噜噜在线视频| 一区二区三区视频在线观看免费| 夜夜操天| 亚州欧美在线| 欧洲亚洲国产综合在线| 日韩99999| 综合网天天| 久久在线观看免费视频| 毛片电影一区二区三区| 久草婷婷| 校园春色五月天| 久久久久久日韩| 99欧美| 麻豆天美传媒在线视频天堂| av橘色网站| 日韩av电影成人在线| 日韩性爱视频免费在线| 亚洲美女30b| 国产一区二区在线看| 亚州综合色| 台湾成人无码AV| 97天天摸天天碰| 中文字幕第23区| 蜜臀久久99精品久久久久久-DVD原版全| 2018天天日天天日| 一区二区三区在线资源| 北野未奈加勒比av| 日韩成人精品| 亚洲91极品| 九热超碰| 大香蕉黄色一区| 密臀AV在线| 东北女人操逼| 国产亚洲人妻综合日韩 久久| 四虎在线观看网站| 日韩激情啪啪啪| 中文字幕视频在线观看一区二区| 91天美免费| 久操网址| 熟妇高潮一区二| 99久久无色码| 欧洲精品一级二级精品综合视频综合| 狠狠色噜噜狠狠狠狠狠色综合久久| 草b在线 | 国产伦乱91| 久久久99999久网站| 欧美性xxxxx狂欢| 天天干天天拍| 91麻豆天美传媒在线| 国产精品三级视频网站| 97久久超碰亚洲| 草莓精品视频| 日韩欧视频| 99亚洲天堂| 欧美性少妇| www…国产操逼| 久久久内射良家| 国产性爱乱伦AV| 伊人久久蜜月| 岛国艾薇凹凸视频天堂| 欧美久久人体| 欧美久久人体| www.久久爱| 五月天偷拍| 久久久久九九九九九| 中日韩久久久| 91天天美女| 国产久久久久久久久一区二区| 97超碰中文字幕| 婷婷亚洲五月***久久| 天美传媒精品久久视频| 色色色综合| 91色插| 一本一道人妻久久一区二区三区 | 特色a在线上| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 欧美精品三级黄片| 色偷偷色偷偷欧美日韩| 中文字幕精品资源在线| 97超碰色| 中文字幕78| 中文字幕精品资源在线| 夜夜躁狠狠躁日日躁av| 青青草视频导航官网| 国产精品久久久久久片| 91爱啪| 久久精9| 亚洲成人美女无吗| 九月伊人中文字幕| 免费草草草草草视频| 九九久久综合| 国产 日韩 欧美高清| 人妻大香蕉| 欧美另类色图片| 奇米四色网| 激情文学小说一区二区 | 97就爱干| 天天色悠悠激情| 久久精品国产亚洲AV无码做| 大鸡巴久久| 国产精品suv一区| 啊视频在线| 久久熟妇五十路一区| jk白丝没脱就开始啪啪| 亚洲91色| 久久久久久久久9| 欧美伊人久久综合网| 老熟妇一区二区三区啪啪| 中文字幕 国产区| 婷婷久久五月综合激情| 精品大全99999| 欧美97在线观看| 男人天堂2019亚洲| 丁香五月激情综合国产| 三级特黄60分钟播放| 精品人妻一区二区三区不卡断| 丰满翘臀美女影院视频| 久久99综合| 久久riav中文精品| 日韩免费三级黄片电影| 天美传媒婬乱在| 久久99干一本高清| 肉丝中文无码高清| av久日| 国产极品999| 91啪啪视频| 操逼逼福利视频| 肏逼视频日本| 熟女探花啪啪| 无码精品久久久久久亚洲| 久久精品国产99久久,亚洲日韩久久日本一区一区三区 | 懂色AV中文| 欧美性爱97超碰| 91操人视频| 在线性黄高清免费视频| 国产精品嫩草影院免费| 中文字幕五月婷婷免费| 久久天天躁日日躁狠狠躁 | 久久一区,青青青青草视频在线播放| 欧美成人黄网色网站| 午夜精品久久久久久久久久蜜桃| 国产粉嫩蜜臀av一区二区三区| 欧中美三级一区二区三区| 亚洲综合色在线| 男人天堂无码| #NAME?| 日本加勒比无码专区一二三| 亚洲国产青青| 97情超碰色| 春色综合免费| 国产午夜精品一区二区三区牛牛| 啪啪啪男女亚洲中文字幕99| 久久久久久十| 九九九色| 国产三级在线现体验区| 操逼免费视频无码国产| 亚洲精品乱码久久久久久蜜桃麻豆| 亚洲毛片一级带毛片基地| 国产黄片精品在线| 韩国黄色片精品久久久| 狠狠中文字幕| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 91久久久久久久久久久| 久久久不能久久久久| 国产视频一区二区在线观看| 9 7超碰在线免费观看| 性爱欧美五月| 欧美色吧综合| 人人看黄色视频| 91亚洲色人| 国产精品探花视频| 男人天堂一区二区| 日影院久久婷婷夜夜网| 78精品| 97超碰人人模人人拍人人| 看免费一级在线播放毛片| 亚洲激情综合另类男同| 国产精品久久伊人| 老熟女91av| 久草精品视频| 91天美| 强奸国产精品视频| 女同在线视频一区| 九9热伊人| 亚洲欧洲自拍| 在线观看亚洲专区| 亚洲乱色视频一区、二区在线| 亚洲永久永久永久永久一级一级一级精品 | 国产成人精品一区| 色汉综合| 中文色综合| 色婷婷狠狠18禁| 婷婷色香| 国产精品农村妇女精品| 少妇人妻无码| 国产97亚洲| 日韩欧美aⅴ综合网站发布| 在线 制服丝袜中出 人妻| 欧洲亚洲人妻无码中字久久三区四区 | 高精欧美色| 国产绿奴视频在线观看| 啊啊啊啊啊在线观看网址| 中文字幕精品三级久久久| 婷婷久久五月综合激情| 97人人草| 99热日| 亚洲精品久久久久毛片A片拉屎 | 日本成a人v网站在线观看| 国产小u女在线观看| 91 国产丝袜在线放观看| 中出91视频| 国产精品久久久久无码A√| 国内91熟女人妻丝袜天天精品视频在线| 一本一首道人妻少妇免费久久| 日韩15p| 婷婷六月色开| 中文字幕无码不卡啪啪| 中文字幕av亚洲在线| 91天美传媒在线| 操国产逼| 高树玛利亚无码流出| 国产一区在线播放| 丝袜美腿诱惑亚洲欧美视频在线观看 | 磁力99AV| 91网站视频在线观看| 亚洲激情综合另类| 日本三级久| 亚洲中文字幕熟女少妇一区二区| 强奸乱伦资源| 国产乱不卡| 肉嘟嘟www视频在线观看高清| 亚洲欧洲色情高清| 亚洲囯产精品女人久久久| 国产高清不卡视频| 国模私拍一区二区三区神乳| 精久久久91| 日韩有码 一区二区三区| 亚洲欧美一区二区三区在钱蜜桃 | 51一区二区三区| 久久熟女久| 夜夜影视四色| 在线洲亚线| 五月婷在线| 国产91 丝袜在线播放00-百度| 四虎AV在线观看| 丰满熟女一区二区三区在线播放| 亚洲欧美另类少妇精品| 国产乱色国产精品免费视| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 中文久久久| 91精品电影18| 久久精品国产99精品亚洲蜜...| 麻豆精品A片免费观看| 婷婷丁香九月| 啊啊啊在线看| 亚州伊人色综台| 久久中文字幕不卡人妻| 免费成人在线熟妇网| 欧洲一级性爱视频在线观看| 99re视频这里只有精品| 不卡中文字幕aⅴ在线| 亚洲综合113页| 操逼操逼逼操操逼91 | 十八禁视频一区二区| 都市激情人妻一区二区青青操视频| 中文字幕亚洲永久精品| 欧美色图电影| 男人久久精品| 日本有码久久| 人人摸人人添人人操 | 日韩欧美视频青青| 18禁免费视频| 亚洲风情在线观看| 亚洲 另类 丝袜 自拍 动漫| 一区二区日韩欧美久久| 日韩综合无码色欲vv| 天美传媒麻豆一区二区三区国产精| 亚洲天堂色图| 亚洲制服欧美另类内射| 国产福利一区二| 天天搞欧美| 亚洲国产综合久久天堂| 色欲久久综合| 亚洲最新a在线观看| 凹凸精品熟女在线观看| 激情文学亚洲| 加勒比伊人综合| 国产精品青青草| 国产热RE99久久6国产精品首| 在线日韩精品一区二区三区| 亚洲一区中文字幕| 长久操视频| 好吊色一区| 人妻少妇一区二区| 色色五月天激情| 国产精品嫩草影院免费| 久久亚洲熟妇在线视频| 欧美精品四区| 思思热在线观看| 久久一区二区三区入口| 国产不卡免费在线视频| 欧美一二三级精品在线| 男人天堂网站| 精品午夜福利| 97精品免费视频网站| 国产精品一区二区麻豆| 2017超碰| 久久久91福利姬| 中文字幕日韩人妻视频一区二区三区交换夫妻 | 日本东京热大香蕉a片| 亚洲 欧美 中文 日韩超碰| 日本3级一区二区免费| 色色色欧美| 搡老女人老妇女AAA一VU麻豆| 亚欧无码线免费观看视频| 91成人18| 操b在线观看| se吧提供91精品国产91久久久久久 | 中国一级特黄大片护士| 亚洲免费在线探花| av在线免费一区二区| 中文字幕中文字幕一区二区| 中文字幕一区二区日韩网| 日韩欧美大力操| 国产真乱mangent| 亚洲无码国产精品久久| 国产av又色又爽又黄| 51一区二区三区| 日韩性爱再线视频| 日韩999| 亚洲色图大香| 嗯啊啊啊轻点视频 | 加勒比aⅴ| 天天舔天天 | 中文字幕欧洲有码| 大香蕉中文在线| 懂色aV一区二区天美传媒| av一区二区三区不卡| 国产一进一出视频网站| 国模无码一区二区三区在线| 久久98| 午夜久久一区二区无码中出| 欧美性爱网97| 性欧美999| 亚洲高清视频在线免费观看| 久久久久人妻二区精品叶可怜| av日韩国产一区二区| 天天日B夜夜干B时时操B| 丁香五月性爱| 国模不卡一本二本三电影| 久久噜| 精品九区| 手机在线中文字幕国产| 六月婷婷五月丁香| 91成人国产综合久久精品蜜月| 亚洲日韩乱码中文无码蜜桃臀网站 | 呦呦一区| 亚洲色图亚洲无码强奸乱伦| 爱爱动态120秒| 日韩无码AB| 大鸡巴久久| 欧美激情性久久久久久| 色色婷婷五月| 天天插夜夜爽| 熟女探花啪啪| 亚洲天堂久久| 另类视频在线| 日本欧美中文字幕| 色99在线| 精品久久九| 精品九九九九| 国产激情久久久| 国产第二页| 测评在线观看AV| 欧美一级做a爰片免费视频| 91jk色拍| 国产一区在线播放| 热九九精品| 亚州综合AⅤ| 26uuu最新| 九九热最新| 熟女91网| 亚洲 日韩 丝袜 熟女 变态| 亚洲一区二区三区麻豆传媒| 久久久中文| 制服诱惑亚洲一区二区三区在线观看| 丝袜人妻av一区二区| 久久99网站| 欧美在线干| 亚洲av综合色| 色超碰综合| 亚洲精品一区二区精华| 91人妻视频在线| 色欧美亚洲| www.夜夜| 另类小说欧美激情校园春色| 亚洲成?V人片在线观看福利| 91欧美丝袜| 色色香蕉| 神马九九九| 久久久久亚洲Aⅴ无码| 99re99视频在线免费观看| 秋霞一级鲁丝片A片| 韩日男人的天堂| 84YTCOM性无码| 97香焦色区| aV中亚| 国产蜜臀精品一区免费尤物| 97超碰色色| 天天操av懂色| 成人免费性爱视视| 香蕉一区二区三区在线视频| 电家庭影院午夜69久久夜色精品国产69乱| 99激情视频| 97亚洲在线| 色呦呦、国产精品| 免费少妇一区二区| 学生妹天天看| 色情五月综合婷婷| 久 久无码人妻AV| 国产视频三区四区| 蜜乳视频网站| 美女丝袜激情小说| 2024人人操人人摸| 久久久久久久精| 国产大片精久久久久久| xxxx网站亚洲精品| 东京热AV男人的天堂| 伊人久久婷婷| 日韩精品中文字幕人妻| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 久久精品一区一起草| 婷婷色中文字幕| 国产精品96| 999综合色| 久99久视频| V A在线| 中文一区在线日| 五月婷婷无码| 级做a爱无码性色永久免费| AV99热18这里只有精品| 久久久com| 欧美日韩大香蕉| 国产成人精品一区| 黄色乱论网站| 1禁看欧美黄片免费看| 美女91AV| 素人无码中文字幕| 色哟哟的毛片| 伊人久久大香线蕉无码| 99热在线播放| 久久久久久久久久久久九| AV九九| 日本三级A片网站com| 亚洲中文sv| 97超级欧美| 屌逼传媒| 91丨熟女丨丰满熟女| 国产色产精品在线观看| 久久久91福利姬| 国产农村妇女精品1区二区| 国产成人www免费人成看片| 免费A片三p视频| avav青青草久久夜| 欧美熟妇亚洲版| 欧美色三级片91| 天天看,天天做| 久久精品 六十路 熟女 欧美| 免费男人的天堂| 成人五月天色网| 国产亚洲 中文欧美久久| 强奸乱伦中文字幕AV| 日本成人在线不卡一区二区三区| 天天综合站| 五月婷婷丁香六月丁香| 亚洲天堂男人天堂网| 一区二区三区四区在线不卡| 久久久婷| 1024亚洲中文字幕久在线看片你懂的 | 熟妇一区二区| 亚洲欧美变态| 欧美日韩美女精品久草一区二区三区 | 无码操逼天堂| 99在线视频播放| 欧美狠狠操| 午夜福利久久久噜久噜久久综合| 91碰碰| 日本欧美国内在线| www成人啪啪18秘 免费| 青娱乐亚洲自拍| 国内偷自视频区视频综合| 日本精品一级二级三级| 少妇久久久| 99国产精品| 九九九久久久| 蜜臀久久99精品久久久久| 97精品在线视频| v91av| 婷婷久月| 久久久97| 欧美大香蕉久| 日韩三级在线观看网站| 人人操人人色网| 精品无码欧美三级| 強姦亂倫a| 91伊人久| 伊人网综合在线视频| 中文字幕日韩人妻视频一区二区三区| 日韩美女啪啪一区| 日韩欧美中文日韩欧美色| xxx0国产在线播放| 国产激情av女片自拍| www.人人cao| 欧美激情综合| 久久9精品视频| 日本999精品视频| WWW.加勒比人妻一区不卡.com| 男人网站婷婷| 97精品人妻一二三四| 欧美亚洲天天| AAAA级日本片免费视频| 夜夜 中文视频rt| 自慰白浆在线观看| 欧美一级专区免费大片| 欧美精品另类人妖xxxx| 九九色综合| 亞洲久久直播| 日美免费黄片| 夜夜 中文视频rt| 丁香五月影院| 婷婷色香| 日韩青久久| 97手机日韩| 中国一级操逼视频| 啊v视频在线观看| 美女高潮视频91| 欧美日韩美女精品久草一区二区三区 | 欧美 亚洲 大香| 精品一区二区三区蜜桃臀www| 久久久免费高清中文视频| 无码人妻一区二区三区免费九色| 翔田千里无码中出中文字幕| 中文字幕av乱伦| 7月婷婷综合| 九九九九97| 久久一二三四| 亚洲Av无码成人精品国产| 国产视频一区二区在线| 热久久无毒不卡| 污色区网站| 色青青久久影视| 厕所偷拍在线| 99999国产| 乱伦图一区| 日韩一999精品| 91欧美www| 亚乱色| 亚洲色图20p| AV有码在线| 亚洲啪啪视频一区二区| 男人下部插入女人下部| 日韩电影中文字幕| 很黄很色的视频在线观看| 中文高清一区二区的| 老熟妇一区二区三区| 无遮挡一级毛片视频免费的| 一区二区三区精品黑丝白丝酒店对鸡 | 91丝袜人妻| 男人高清无码一区二区| 操死我干死我| 丝袜美腿av女优在线| 狠狠激情综合狠狠操中文字幕| 亚射在线| 久久久久九九九九| 97在线视频观看| 人人爽夜夜玩视频| 在线观看AV片| 欧日韩在线观看| 日韩av免费一级电影| 欧美亚洲玖玖玖| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 人妻少妇久久中文| 午夜精品久久久久久久久久蜜桃| 久久熟女人| 亚洲高清欧美总合| 啊v视频在线观看| 亚洲欧美变态| 欧美v亚洲v日韩v最新在线二区| 久久m| 成人a大片在线观看| 天天综合影院91| 免费看片黄| 偷拍超碰| 精品久久久久久中文字幕三区| 综合久欧洲| 无码人妻精品一区二区三区99不卡 | 岛国天天午夜影院传媒网| 日本欧美亚洲高清在线看| 青青伊人久久| 顶级丝袜熟女一区二区三区 | 久久久久久9| 99青草| 人人看黄色视频| 91夜夜蜜桃臀1区2区3区| av爱爱爱| 日韩视频小说在线观看| 中日韩久久久| 97久久综合网| 99热免费| 日韩一级久久毛片| 大香网伊人久久综合网eew| 激情抓乳插进去啪啪啪日韩 | 一区二区三区一亚洲中文字幕、综合区灬 | 东北女人被操| 日韩人妻播放| 欧美偷| 亚洲情色第一页| A级在线视频| 北条麻妃性愛视频| 精品伊人久久久大香线蕉小说| yazhououmeizongya| 亚洲色色色| 亚洲中文字幕熟女| 精品人妻一区春色| 欧美成人性爱视频大全| 国产白丝av| 日本精品免费一区二区三区四区| 色成人Www精品永久观看| 人人操人人操人妻人| 91女人的网站| 户外裸露刺激视频第一区| 国产在线激情| 亚洲淫乱骚妇AV| 99热只有这里有精品| 无码人妻精品酒店| 91N综合在线| 色婷婷久久| 欧美性爱综合,免费| 91伊人久久在线| 欧美淫穴| 看日韩操逼| 欧美v日韩v亚洲v最新在线| 欧美精品三区| 青青草中文-久久青草精品一区二区三 | 精品性爱| 欧美性少妇| 欧美狠狠操| 激情五月综合| 婷婷去俺也去六月色| 色欲久久99国产精品久久久久久| 色噜噜人妻丝袜AV资源| 婷婷色中文字幕| 日韩高清黄片| 东京热双插| 91男女| 成人A片男人的天堂| 91操人视频| 色婷婷激一区二区三区 | 欧美 亚洲 制服 精品| 97摸视频| 国产黄色影片在线观看| 91天天综合日韩欧美| 青青操视频在线| 手机不卡视频不卡在线一二三区| 黄网色一区二区三区四区精品| 最近2018中文字幕在线高清第一页| 深夜激情| 夜夜免费视频| 另类 综合 日韩 欧美 亚洲| 骚货人妻偷情自拍在线视频| 国内三级自拍小视频在线观看| 蜜乳Av成人片网站| 人妻精品视频一区二区三区| 91亚洲网站| 久9爱精品| 综合97久久| 亚洲色情在线影视| 久久久久ab| 亚洲色图欧美色图制服丝袜| 欧美嫩性色| 吻戏激情性巴克| 五月天社区| 国产伦精品一区二区三区在线观| 久操网线| 成人性爱美曰韩| 亚洲成人性| 密乳AV免费观看| 青青青国产手线观看视频2| av网站免费看| 99久久99久久免费精品蜜臀| 精品国产乱子伦一区二区三区,精品一| 春色综合免费| 一区二区播放| 亚洲精品 欧美97色色| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 96一区二区| 精品国产乱子伦一区二区三区,精品一| 91精品婷婷国产综合久久| 大香蕉伊然在亚洲91| 99热18这里只有精品| 丝袜色综合| 超碰在线综合97| 9久9久9久9久视频网站| 中国和日本人色哪个不下载能放| 97操碰| 久久系列| 13小男生GAY自慰脱裤子| 一级婬片120分钟试看| 99亚洲精品| 精品成人亚洲午夜电影| 3P乱轮视频| 岛国片在线观看视频亚洲| 久久久久婷婷| 欧美熟女少妇| 高树玛利亚无码流出| 久久偷拍人| 十八禁一区二区无码观看| 99这里都是精品| 999精品女人| 一起草三级AV电影在线观看 | 国产肏逼网站| 天天综合网日韩7799| www成人啪啪18秘 免费| 九热视频| 91欧美长吊| 亚洲情色综合网| 日骚逼视频| 强奸抽插av| 国产成人bd在线观看| 九九成人| 鸥美精品一区二区久久婷婷| 91嫩草在线| 天天影视亚洲| www.伪伪| 亚洲色色色| 亚洲91网站| 精品欧美乱码久| 日婷婷| 五月激情视频| 性色国产东北露脸精品视频| 大香蕉手机在线| 91久久久亚洲| 91动漫操逼视频| 国产精品久久发布| 久久久九九| 天天日天天操天天射河南省| 色色色欧美| 精品少妇一区二区三区免费观看| 中文字幕78| 人妻一区二区三区熟女| 能在线播放的国产三级| 日本熟妇一区二区三区| 欧美亚州色的图| 亚洲色婷婷久久久综合日本 | 婷婷性网| 日本一级婬片试看三分钟| 五月天激情视频| 曰韩少妇无码| 大香蕉乱级| 99热思思| 色五月AV在线| 美女视频尤物网在线看| 麻豆天美久久91| 欧美色图片欧美色图| 老熟女乱伦一区| 69超碰综合| 色与欲影视天天看综合网| 国产欧美精选激情视频| 亚洲AV无码天美传媒一区| 亚洲影视第一页| av天堂精品久久| 蜜桃视频精品一区二区三区| 91亚洲欧美激情| 国产成人自拍视频在线| 色色色色色色色色综合| 国产无吗在线播放| 丝袜美腿欧美| 久久久91| 婷婷精品| 欧美韩日精品99综合| 人摸人人操人| SUV一区二区在线看| 狠狠操官网| 日本孕妇一区二区视频操逼免费看 | 91 丝袜在线播放| 色情五月综合婷婷| 2019男人的天堂| 粉嫩不卡一区二区性爱| 69久久久久久久久久久久久| 日韩免费簧片| 一及黄久一点| 狠狠色伊人亚洲综合网站色| 久久久不能久久久久| 国产成人久久精品蜜臀| 久久超碰爱| 国产精品乱码久久| 精品国产乱码久久久久久影片| 加勒比aⅴ| 婷婷六月天| 五十路一区无码| 伊人97超碰| 东北少妇高潮zzzz| 九九十八精品| 久久日韩精品一区二区| 99青青草国产视频| 国产日产精品久久快鸭的功能介绍| 99精品网站| 人人看欧美性爱| 男女性扦B| 色色色色电影网| 91九色丨风韵犹存| 91人妻视频在线| 午夜视频久久久久一区| 九九九九九九九九九九九九九九九女| 99国产在线 精品 视频| 久操影视| 久久伊人大香蕉| 曰韩中文人妻视频| 国产乱弄免费在线视频。 | 九七人妻在线| 综合色久| 操屄日韩| 大香蕉之青青草原| 高清无码国产亚洲| 男人午夜天堂| 97碰碰日本乱偷人妻中文的| 久久久麻豆精品| 蜜臀久久99精品久久久久久酒店| 国产精品天美传媒| 国产精品久久久久久照片| 天天搞欧美| 91女在线观看| 免费在线黄片视频| 日本加勒比无码专区| 69精品人人人人| 欧美人人AAA| 欧美男人天堂| 91操人| 中文啪啪视频| 乱伦1色页| 91精品人妻| 日本999精品| 婷婷五月天综合网| 国产一区二区三三视频| 亚洲春色欧美| 亚洲色性情三级| 人妻22p| 国产视频一区二区三区在线免费观看| 亚洲AV色图一区| 秋霞男人网| 婷婷色五月激情| ji熟女.com| 日少妇视频| 人妻无码一区二区三区久久99| 亚洲无码电影久久久| 久热大香蕉网站| 人妻日日夜夜精品| 最近的最新的中文字幕视频| 欧美精品二区视频在线| 91欧美少妇| 九九九九免费高| 久操B网| 五月天久久久| 中国女人内射6XXXXX| 国产成人在线观看网址| 青青草导航在线视频| 日日干夜夜操视频h| 免费看毛片操穴| 久久久穴999| 久久亚洲日韩国产欧| 91在线限制级| 综合熟女| 五月天玖玖资源站| 一本精品日本在线视频精品| 97资源久久| 熟女少妇一区二区三区| 色拍偷亚洲| 九九九久久久久| 91丝袜在线观看视频在线观看| 99久久综合网| 亚洲免费人妻在| 欧美日韩性爱无码| 精品国产91内射久久| J?P?NESEHD熟女熟妇伦| 天天操妹子| 精品人妻高清麻豆av| 啊啊啊啊啊啊啊啊要喷了| 今日头条成人一区二区三区四虎精品| 荡小穴在线观看| 久久久久免费少妇| 啪啪91| AAA久久| 亚洲天堂99| 丁香婷婷啪啪| 激情五月丁香五月| 久久婷色| 大香蕉九九| 婷婷色色网| 夜夜操狠狠操| 精品久久久久久亚洲| 五月天婷婷综合网| 久操大香蕉手机视频在线看| 99热久| 国产欧美伊人| 中文字幕一区 二 区 三 四 五 区日 日 骚 | 日本精品一区二区三区四区的功能| 欧美综合色图网| 99999国产精品| 夜色91| 91视频精品| 嫩草在线视频| 国语精品内射在线观看| 黑人精品成人一区二区三区| 天天精品| 色色99| 91美女视屏| 日韩ab网| 公司1区2区3区精产精| 男人天堂毛片| 天天久久|