色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

5個必須知道的Pandas數據合并技巧

數據分析與開發 ? 來源:數據分析與開發 ? 作者:數據分析與開發 ? 2022-04-13 10:35 ? 次閱讀

有朋友面試阿里70萬總包的數據崗位,對方問Pandas5數據合并的函數,結果他只答出了2個。

b74fcc98-bad1-11ec-aa7f-dac502259ad0.png那么,究竟是哪五個呢?今天,我們就來帶大家了解一下!目錄:
  • 1. concat

  • 2. append

  • 3. merge

  • 4. join

  • 5. combine

  • 總結

1. concat

concatpandas中專門用于數據連接合并的函數,功能非常強大,支持縱向合并橫向合并,默認情況下是縱向合并,具體可以通過參數進行設置。

	
		pd.concat( objs:'Iterable[NDFrame]|Mapping[Hashable,NDFrame]', axis=0, join='outer', ignore_index:'bool'=False, keys=None, levels=None, names=None, verify_integrity:'bool'=False, sort:'bool'=False, copy:'bool'=True, )->'FrameOrSeriesUnion'在函數方法中,各參數含義如下:
objs: 用于連接的數據,可以是DataFrameSeries組成的列表axis=0 : 連接的方式,默認為0也就是縱向連接,可選 1 為橫向連接join='outer':合并方式,默認為 inner也就是交集,可選 outer 為并集ignore_index: 是否保留原有的索引keys=None:連接關系,使用傳遞的值作為一級索引levels=None:用于構造多級索引names=None:索引的名稱verify_integrity: 檢測索引是否重復,如果為True則有重復索引會報錯sort: 并集合并方式下,對columns排序copy: 是否深度拷貝
接下來,我們就對該函數功能進行演示基礎連接

	
		In[1]:importpandasaspd In[2]:s1=pd.Series(['a','b']) In[3]:s2=pd.Series(['c','d']) In[4]:s1 Out[4]: 0a 1b dtype:object In[5]:s2 Out[5]: 0c 1d dtype:object In[6]:pd.concat([s1,s2]) Out[6]: 0a 1b 0c 1d dtype:object In[7]:df1=pd.DataFrame([['a',1],['b',2]], ...:columns=['letter','number']) In[8]:df2=pd.DataFrame([['c',3],['d',4]], ...:columns=['letter','number']) In[9]:pd.concat([df1,df2]) Out[9]: letternumber 0a1 1b2 0c3 1d4橫向連接

	
		In[10]:pd.concat([df1,df2],axis=1) Out[10]: letternumberletternumber 0a1c3 1b2d4默認情況下,concat是取并集,如果兩個數據中有個數據沒有對應行或列,則會填充為空值NaN合并交集

	
		In[11]:df3=pd.DataFrame([['c',3,'cat'],['d',4,'dog']], ...:columns=['letter','number','animal']) In[12]:df1 Out[12]: letternumber 0a1 1b2 In[13]:df3 Out[13]: letternumberanimal 0c3cat 1d4dog In[14]:pd.concat([df1,df3],join='inner') Out[14]: letternumber 0a1 1b2 0c3 1d4索引重置(不保留原有索引)

	
		In[15]:pd.concat([df1,df3],join='inner',ignore_index=True) Out[15]: letternumber 0a1 1b2 2c3 3d4 #以下方式和上述的輸出結果等價 In[16]:pd.concat([df1,df3],join='inner').reset_index(drop=True) Out[16]: letternumber 0a1 1b2 2c3 3d4指定索引

	
		In[17]:pd.concat([df1,df3],keys=['df1','df3']) Out[17]: letternumberanimal df10a1NaN 1b2NaN df30c3cat 1d4dog In[18]:pd.concat([df1,df3],keys=['df1','df3'],names=['df名稱','行ID']) Out[18]: letternumberanimal df名稱行ID df10a1NaN 1b2NaN df30c3cat 1d4dog檢測重復如果索引出現重復,則無法通過檢測,會報錯

	
		In[19]:pd.concat([df1,df3],verify_integrity=True) Traceback(mostrecentcalllast): ... ValueError:Indexeshaveoverlappingvalues:Int64Index([0,1],dtype='int64')合并并集下columns排序

	
		In[21]:pd.concat([df1,df3],sort=True) Out[21]: animalletternumber 0NaNa1 1NaNb2 0catc3 1dogd4DataFrame與Series合并

	
		In[22]:pd.concat([df1,s1]) Out[22]: letternumber0 0a1.0NaN 1b2.0NaN 0NaNNaNa 1NaNNaNb In[23]:pd.concat([df1,s1],axis=1) Out[23]: letternumber0 0a1a 1b2b #新增列一般可選以下兩種方式 In[24]:df1.assign(新增列=s1) Out[24]: letternumber新增列 0a1a 1b2b In[25]:df1['新增列']=s1 In[26]:df1 Out[26]: letternumber新增列 0a1a 1b2b以上就concat函數方法的一些功能,相比之下,另外一個函數append也可以用于數據追加(縱向合并)
		
							

2. append

append主要用于追加數據,是比較簡單直接的數據合并方式。

	
		df.append( other, ignore_index:'bool'=False, verify_integrity:'bool'=False, sort:'bool'=False, )->'DataFrame'在函數方法中,各參數含義如下:
other: 用于追加的數據,可以是DataFrameSeries或組成的列表ignore_index: 是否保留原有的索引verify_integrity: 檢測索引是否重復,如果為True則有重復索引會報錯sort: 并集合并方式下,對columns排序
接下來,我們就對該函數功能進行演示基礎追加

	
		In[41]:df1.append(df2) Out[41]: letternumber 0a1 1b2 0c3 1d4 In[42]:df1.append([df1,df2,df3]) Out[42]: letternumberanimal 0a1NaN 1b2NaN 0a1NaN 1b2NaN 0c3NaN 1d4NaN 0c3cat 1d4dogcolumns重置(不保留原有索引)

	
		In[43]:df1.append([df1,df2,df3],ignore_index=True) Out[43]: letternumberanimal 0a1NaN 1b2NaN 2a1NaN 3b2NaN 4c3NaN 5d4NaN 6c3cat 7d4dog檢測重復如果索引出現重復,則無法通過檢測,會報錯

	
		In[44]:df1.append([df1,df2],verify_integrity=True) Traceback(mostrecentcalllast): ... ValueError:Indexeshaveoverlappingvalues:Int64Index([0,1],dtype='int64')索引排序

	
		In[46]:df1.append([df1,df2,df3],sort=True) Out[46]: animalletternumber 0NaNa1 1NaNb2 0NaNa1 1NaNb2 0NaNc3 1NaNd4 0catc3 1dogd4追加Series

	
		In[49]:s=pd.Series({'letter':'s1','number':9}) In[50]:s Out[50]: letters1 number9 dtype:object In[51]:df1.append(s) Traceback(mostrecentcalllast): ... TypeError:CanonlyappendaSeriesifignore_index=TrueoriftheSerieshasaname In[53]:df1.append(s,ignore_index=True) Out[53]: letternumber 0a1 1b2 2s19追加字典這個在爬蟲的時候比較好使,每爬取一條數據就合并到DataFrame類似數據中存儲起來

	
		In[54]:dic={'letter':'s1','number':9} In[55]:df1.append(dic,ignore_index=True) Out[55]: letternumber 0a1 1b2 2s19
		
							

3. merge

merge函數方法類似SQL里的join,可以是pd.merge或者df.merge,區別就在于后者待合并的數據是

	
		pd.merge( left:'DataFrame|Series', right:'DataFrame|Series', how:'str'='inner', on:'IndexLabel|None'=None, left_on:'IndexLabel|None'=None, right_on:'IndexLabel|None'=None, left_index:'bool'=False, right_index:'bool'=False, sort:'bool'=False, suffixes:'Suffixes'=('_x','_y'), copy:'bool'=True, indicator:'bool'=False, validate:'str|None'=None, )->'DataFrame'在函數方法中,關鍵參數含義如下:
left: 用于連接的左側數據right: 用于連接的右側數據how: 數據連接方式,默認為 inner,可選outer、left和righton: 連接關鍵字段,左右側數據中需要都存在,否則就用left_on和right_onleft_on: 左側數據用于連接的關鍵字段right_on: 右側數據用于連接的關鍵字段left_index: True表示左側索引為連接關鍵字段right_index: True表示右側索引為連接關鍵字段suffixes: 'Suffixes' = ('_x', '_y'),可以自由指定,就是同列名合并后列名顯示后綴indicator: 是否顯示合并后某行數據的歸屬來源
接下來,我們就對該函數功能進行演示基礎合并

	
		In[55]:df1=pd.DataFrame({'key':['foo','bar','bal'], ...:'value2':[1,2,3]}) In[56]:df2=pd.DataFrame({'key':['foo','bar','baz'], ...:'value1':[5,6,7]}) In[57]:df1.merge(df2) Out[57]: keyvalue2value1 0foo15 1bar26其他連接方式

	
		In[58]:df1.merge(df2,how='left') Out[58]: keyvalue2value1 0foo15.0 1bar26.0 2bal3NaN In[59]:df1.merge(df2,how='right') Out[59]: keyvalue2value1 0foo1.05 1bar2.06 2bazNaN7 In[60]:df1.merge(df2,how='outer') Out[60]: keyvalue2value1 0foo1.05.0 1bar2.06.0 2bal3.0NaN 3bazNaN7.0 In[61]:df1.merge(df2,how='cross') Out[61]: key_xvalue2key_yvalue1 0foo1foo5 1foo1bar6 2foo1baz7 3bar2foo5 4bar2bar6 5bar2baz7 6bal3foo5 7bal3bar6 8bal3baz7指定連接鍵可以指定單個連接鍵,也可以指定多個連接鍵

	
		In[62]:df1=pd.DataFrame({'lkey1':['foo','bar','bal'], ...:'lkey2':['a','b','c'], ...:'value2':[1,2,3]}) In[63]:df2=pd.DataFrame({'rkey1':['foo','bar','baz'], ...:'rkey2':['a','b','c'], ...:'value2':[5,6,7]})  In[64]:df1 Out[64]: lkey1lkey2value2 0fooa1 1barb2 2balc3 In[65]:df2 Out[65]: rkey1rkey2value2 0fooa5 1barb6 2bazc7 In[66]:df1.merge(df2,left_on='lkey1',right_on='rkey1') Out[66]: lkey1lkey2value2_xrkey1rkey2value2_y 0fooa1fooa5 1barb2barb6 In[67]:df1.merge(df2,left_on=['lkey1','lkey2'],right_on=['rkey1','rkey2']) Out[67]: lkey1lkey2value2_xrkey1rkey2value2_y 0fooa1fooa5 1barb2barb6指定索引為鍵

	
		Out[68]:df1.merge(df2,left_index=True,right_index=True) Out[68]: lkey1lkey2value2_xrkey1rkey2value2_y 0fooa1fooa5 1barb2barb6 2balc3bazc7設置重復列后綴

	
		In[69]:df1.merge(df2,left_on='lkey1',right_on='rkey1',suffixes=['左','右']) Out[69]: lkey1lkey2value2左rkey1rkey2value2右 0fooa1fooa5 1barb2barb6連接指示新增一列用于顯示數據來源

	
		In[70]:df1.merge(df2,left_on='lkey1',right_on='rkey1',suffixes=['左','右'],how='outer', ...:indicator=True ...:) Out[70]: lkey1lkey2value2左rkey1rkey2value2右_merge 0fooa1.0fooa5.0both 1barb2.0barb6.0both 2balc3.0NaNNaNNaNleft_only 3NaNNaNNaNbazc7.0right_only
		
							

4. join

join就有點想append之于concat,用于數據合并

	
		df.join( other:'FrameOrSeriesUnion', on:'IndexLabel|None'=None, how:'str'='left', lsuffix:'str'='', rsuffix:'str'='', sort:'bool'=False, )->'DataFrame'在函數方法中,關鍵參數含義如下:
other: 用于合并的右側數據on: 連接關鍵字段,左右側數據中需要都存在,否則就用left_on和right_onhow: 數據連接方式,默認為 inner,可選outer、left和rightlsuffix: 左側同名列后綴rsuffix:右側同名列后綴
接下來,我們就對該函數功能進行演示

	
		In[71]:df=pd.DataFrame({'key':['K0','K1','K2','K3','K4','K5'], ...:'A':['A0','A1','A2','A3','A4','A5']}) In[72]:other=pd.DataFrame({'key':['K0','K1','K2'], ...:'B':['B0','B1','B2']}) In[73]:df Out[73]: keyA 0K0A0 1K1A1 2K2A2 3K3A3 4K4A4 5K5A5 In[74]:other Out[74]: keyB 0K0B0 1K1B1 2K2B2 In[75]:df.join(other,on='key') Traceback(mostrecentcalllast): ... ValueError:Youaretryingtomergeonobjectandint64columns.Ifyouwishtoproceedyoushouldusepd.concat如果想用key關鍵字, 則需要key是索引。。。指定key

	
		In[76]:df.set_index('key').join(other.set_index('key')) Out[76]: AB key K0A0B0 K1A1B1 K2A2B2 K3A3NaN K4A4NaN K5A5NaN In[77]:df.join(other.set_index('key'),on='key') Out[77]: keyAB 0K0A0B0 1K1A1B1 2K2A2B2 3K3A3NaN 4K4A4NaN 5K5A5NaN指定重復列后綴

	
		In[78]:df.join(other,lsuffix='_左',rsuffix='右') Out[78]: key_左Akey右B 0K0A0K0B0 1K1A1K1B1 2K2A2K2B2 3K3A3NaNNaN 4K4A4NaNNaN 5K5A5NaNNaN其他參數就不多做介紹了,和merge基本一樣。
		
							

5. combine

在數據合并的過程中,我們可能需要對對應位置的值進行一定的計算,pandas提供了combinecombine_first函數方法來進行這方面的合作操作。

	
		df.combine( other:'DataFrame', func, fill_value=None, overwrite:'bool'=True, )->'DataFrame'比如,數據合并的時候取單元格最小的值

	
		In[79]:df1=pd.DataFrame({'A':[0,0],'B':[4,4]}) In[80]:df2=pd.DataFrame({'A':[1,1],'B':[3,3]}) In[81]:df1 Out[81]: AB 004 104 In[82]:df2 Out[82]: AB 013 113 In[83]:take_smaller=lambdas1,s2:s1ifs1.sum()elses2 In[84]:df1.combine(df2,take_smaller) Out[84]: AB 003 103 #也可以調用numpy的函數 In[85]:importnumpyasnp In[86]:df1.combine(df2,np.minimum) Out[86]: AB 003 103fill_value填充缺失值

	
		In[87]:df1=pd.DataFrame({'A':[0,0],'B':[None,4]}) In[87]:df2=pd.DataFrame({'A':[1,1],'B':[3,3]}) In[88]:df1 Out[88]: AB 00NaN 104.0 In[89]:df2 Out[89]: AB 013 113 In[90]:df1.combine(df2,take_smaller,fill_value=-88) Out[90]: AB 00-88.0 104.0overwrite=False保留

	
		In[91]:df1=pd.DataFrame({'A':[0,0],'B':[4,4]}) In[92]:df2=pd.DataFrame({'B':[3,3],'C':[-10,1],},index=[1,2]) In[93]:df1 Out[93]: AB 004 104 In[94]:df2 Out[94]: BC 13-10 231 In[95]:df1.combine(df2,take_smaller) Out[95]: ABC 0NaNNaNNaN 1NaN3.0-10.0 2NaN3.01.0 #保留A列原有的值 In[96]:df1.combine(df2,take_smaller,overwrite=False) Out[96]: ABC 00.0NaNNaN 10.03.0-10.0 2NaN3.01.0另外一個combine_first

	
		df.combine_first(other:'DataFrame')->'DataFrame'當df中元素為空采用other里的進行替換,結果為并集合并

	
		In[97]:df1=pd.DataFrame({'A':[None,0],'B':[None,4]}) In[98]:df2=pd.DataFrame({'A':[1,1],'B':[3,3]}) In[99]:df1 Out[99]: AB 0NaNNaN 10.04.0 In[100]:df2 Out[100]: AB 013 113 In[101]:df1.combine_first(df2) Out[101]: AB 01.03.0 10.04.0 In[102]:df1=pd.DataFrame({'A':[None,0],'B':[4,None]}) In[103]:df2=pd.DataFrame({'B':[3,3],'C':[1,1]},index=[1,2]) In[104]:df1 Out[104]: AB 0NaN4.0 10.0NaN In[105]:df2 Out[105]: BC 131 231 In[106]:df1.combine_first(df2) Out[106]: ABC 0NaN4.0NaN 10.03.01.0 2NaN3.01.0
		
							

總結

以上就本次介紹的關于Pandas數據合并的全部內容,相比之下我們可以發現:
  • append主要用于縱向追加數據,比較簡單直接;
  • concat功能最強大,不僅可以縱向合并數據還可以橫向合并數據而且支持很多其他條件設置;
  • merge則主要用于橫向合并數據,類似SQL里的join連接;
  • join則比較簡單,用于橫向合并數據,條件相對苛刻;
  • combine更像是按照元素進行合并,根據一定的條件(函數規則)來進行數據合并。
審核編輯 :李倩


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據
    +關注

    關注

    8

    文章

    7006

    瀏覽量

    88955
  • concat
    +關注

    關注

    0

    文章

    3

    瀏覽量

    1916

原文標題:5 個必須知道的 Pandas 數據合并技巧

文章出處:【微信號:DBDevs,微信公眾號:數據分析與開發】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    英國CMA有條件批準沃達豐與Three合并

    推出合并后的5G網絡。 CMA在審查過程中認為,沃達豐與Three的合并有可能對英國移動行業的競爭格局產生積極影響。因此,在確保合并后企業能夠履行其投資承諾的前提下,CMA決定給予此次
    的頭像 發表于 12-06 13:53 ?145次閱讀

    RAPIDS cuDF將pandas提速近150倍

    在 NVIDIA GTC 2024 上,NVIDIA 宣布,RAPIDS cuDF 當前已能夠為 950 萬 pandas 用戶帶來 GPU 加速,且無需修改代碼。
    的頭像 發表于 11-20 09:52 ?165次閱讀
    RAPIDS cuDF將<b class='flag-5'>pandas</b>提速近150倍

    貼片電阻應用須知

    貼片電阻應用須知
    的頭像 發表于 10-16 09:47 ?376次閱讀

    高精度采用電路的電阻選型須知

    高精度采用電路電阻選型須知
    的頭像 發表于 10-16 09:28 ?267次閱讀

    光于預充電阻的選型須知

    預充電阻的選型須知
    的頭像 發表于 09-27 14:13 ?296次閱讀

    MAX9877將數據發送到NVM中,發送數據時,必須要填滿128字節嗎?

    想請問一下9877將數據發送到NVM中,一頁的數據傳輸,最多可以發送128字節。想問一下發送數據時,必須要填滿128字節嗎,還是可以只要發
    發表于 07-24 07:00

    半導體行業常用術語大全:30專業名詞詳解

    在半導體行業中,了解和掌握專業名詞是至關重要的。這些名詞不僅有助于我們更好地理解半導體的制造過程,還能提升我們在行業中的溝通效率。以下是半導體人必須知道的30專業名詞的解釋。
    的頭像 發表于 06-14 10:47 ?1w次閱讀
    半導體行業常用術語大全:30<b class='flag-5'>個</b>專業名詞詳解

    談談EMC,工程師必須知道的58EMC問答

    1要對產品做電磁兼容設計?答:滿足產品功能要求、減少調試時間,使產品滿足電磁兼容標準的要求,使產品不會對系統中的其它設備產生電磁干擾。2對產品做電磁兼容設計可以從哪幾個方面進行?答:電路設計(包括器件選擇)、軟件設計、線路板設計、屏蔽結構、信號線/電源線濾波、電路的接地方式設計。3在電磁兼容領域,為什么總是用分貝(dB)的單位描述?10mV是多少dBmV?答
    的頭像 發表于 06-13 08:28 ?472次閱讀
    談談EMC,工程師<b class='flag-5'>必須知道</b>的58<b class='flag-5'>個</b>EMC問答

    Labview 如何將多列列表框相鄰的兩單元格合并?如同Excel合并單元格

    如題,Labview中 如何將多列列表框相鄰的兩單元格合并?如同Excel合并單元格。請各位大神幫忙指點,謝謝。
    發表于 04-25 11:12

    環境試驗中你必須知道的15專業術語

      三、試驗箱穩定狀態   當試驗箱工作空間內任意點的變化量滿足設備性能指標要求時,我們稱試驗箱處于穩定狀態。這是確保試驗準確性和可重復性的基礎。   四、溫度偏差   在試驗箱穩定狀態下,工作空間內各測量點在規定時間內記錄的最高和最低溫度與設定溫度的差值。這個指標反映了溫度控制的精確度。   五、相對濕度溫差   類似于溫度偏差,這是指工作空間內各測量點的
    的頭像 發表于 04-18 15:19 ?589次閱讀
    環境試驗中你<b class='flag-5'>必須知道</b>的15<b class='flag-5'>個</b>專業術語

    使用愛星物聯IoT平臺時,哪些參數配置是開發者必須知道的?

    hello,小伙伴們,上周我們《愛星物聯IoT平臺正式開源啦》,感興趣的開發者可以點擊文中的鏈接下載和體驗。在使用愛星物聯IoT平臺之前,有哪些參數配置是嵌入式開發者必須配置的?小安帶大家一起
    的頭像 發表于 03-30 08:22 ?631次閱讀
    使用愛星物聯IoT平臺時,哪些參數配置是開發者<b class='flag-5'>必須知道</b>的?

    強調:關于變頻器,你必須知道的哪些事情?

    分類選型 1) 采用變頻的目的:恒壓控制或恒流控制等。 2) 變頻器的負載類型:如葉片泵或容積泵等,特別注意負載的性能曲線,性能曲線決定了應用時的方式方法。 3) 變頻器與負載的匹配問題: I.電壓匹配:變頻器的額定電壓與負載的額定電壓相符。 II. 電流匹配:普通的離心泵,變頻器的額定電流與電機的額定電流相符。對于特殊的負載如深水泵等則需要參考電機性能參數,以最大電流確定變頻器電流和過載能力。 III.轉矩匹配:這種情況在恒轉矩負
    的頭像 發表于 03-11 08:39 ?544次閱讀
    強調:關于變頻器,你<b class='flag-5'>必須知道</b>的哪些事情?

    沃達豐拒絕與Iliad合并意大利業務

    法國電信運營商Iliad SA近日宣布,沃達豐已拒絕了其合并兩家公司在意大利業務的提議。Iliad最初于2023年12月18日提出這一要約,并隨后提交了進一步修訂的提案,旨在將Iliad意大利公司和沃達豐意大利公司合并為一新的
    的頭像 發表于 02-02 10:14 ?562次閱讀

    什么是HMI:你必須知道的定義、趨勢與關鍵特性

    ,讓操作人員或維護人員能夠直接操作設備并進行監控。HMI系統通常能提供豐富的資訊,例如溫度、壓力、制造流程步驟以及材料的計量數據。還能顯示設備中物料的確切位置或儲存槽內的液位數據等訊息。無論是在制造業、能源管理還是其他自動化的重要行業領域,HMI都扮演著
    的頭像 發表于 01-16 11:11 ?4863次閱讀
    什么是HMI:你<b class='flag-5'>必須知道</b>的定義、趨勢與關鍵特性

    學習FPGA必須知道的社區

    學習FPGA必須知道的社區
    的頭像 發表于 01-03 17:51 ?393次閱讀
    學習FPGA<b class='flag-5'>必須知道</b>的社區
    主站蜘蛛池模板: 在线亚洲中文精品第1页| 攻把受做得合不拢腿play| 日本免费一本天堂在线| 国产午夜精品一区理论片飘花 | 国产在线不卡| FREEHDXXXX学生妹| 亚洲熟妇无码乱子AV电影| 色狠狠色综合吹潮| 美女被爆插| 国产一区二区三区国产精品| xxxxxx视频| 最近2019年日本中文免费字幕| 天天槽任我槽免费| 女生扒开尿口| 老湿机一区午夜精品免费福利| 国产精品18久久久久久白浆.| 99国内精品| 永久adc视频年龄确认| 无套暴躁白丝秘书| 日本视频久久| 美女坐脸vk| 久久免费高清| 交换邻居波多野结衣中文字幕 | 免费在线观看国产| 久久精品无码一区二区日韩av| 国产精品一区二区人妻无码| 成年人国产视频| av淘宝 在线观看| 中文字幕永久在线观看| 亚洲综合色婷婷在线影院| 校花娇喘呻吟校长陈若雪视频| 日本免费一本天堂在线| 亲嘴扒胸摸屁股视频免费网站| 美女胸网站| 老男人粗大猛| 美国z0069| 乱h好大噗嗤噗嗤烂了| 久久亚洲精品永久网站| 久久大综合| 狼人射综合| 久热久热精品在线观看|