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

從小白到大師,這里有一份Pandas入門指南

開發 開發工具
在本文中,作者從 Pandas 的簡介開始,一步一步講解了 Pandas 的發展現狀、內存優化等問題。這是一篇實踐教程,既適合用過 Pandas 的讀者,也適合沒用過但想要上手的小白。

通過本文,你將有望發現一到多種用 pandas 編碼的新方法。

本文包括以下內容:

  • Pandas 發展現狀;
  • 內存優化;
  • 索引;
  • 方法鏈;
  • 隨機提示。

在閱讀本文時,我建議你閱讀每個你不了解的函數的文檔字符串(docstrings)。簡單的 Google 搜索和幾秒鐘 Pandas 文檔的閱讀,都會使你的閱讀體驗更加愉快。

一、Pandas 的定義和現狀

1. 什么是 Pandas?

Pandas 是一個「開源的、有 BSD 開源協議的庫,它為 Python 編程語言提供了高性能、易于使用的數據架構以及數據分析工具」。總之,它提供了被稱為 DataFrame 和 Series(對那些使用 Panel 的人來說,它們已經被棄用了)的數據抽象,通過管理索引來快速訪問數據、執行分析和轉換運算,甚至可以繪圖(用 matplotlib 后端)。

Pandas 的當前最新版本是 v0.25.0

(https://github.com/pandas-dev/pandas/releases/tag/v0.25.0)

Pandas 正在逐步升級到 1.0 版,而為了達到這一目的,它改變了很多人們習以為常的細節。Pandas 的核心開發者之一 Marc Garcia 發表了一段非常有趣的演講——「走向 Pandas 1.0」。

演講鏈接:https://www.youtube.com/watch?v=hK6o_TDXXN8

用一句話來總結,Pandas v1.0 主要改善了穩定性(如時間序列)并刪除了未使用的代碼庫(如 SparseDataFrame)。

2. 數據

讓我們開始吧!選擇「1985 到 2016 年間每個國家的自殺率」作為玩具數據集。這個數據集足夠簡單,但也足以讓你上手 Pandas。

數據集鏈接:

https://www.kaggle.com/russellyates88/suicide-rates-overview-1985-to-2016

在深入研究代碼之前,如果你想重現結果,要先執行下面的代碼準備數據,確保列名和類型是正確的。

  1. import pandas as pd 
  2. import numpy as np 
  3. import os 
  4. # to download https://www.kaggle.com/russellyates88/suicide-rates-overview-1985-to-2016 
  5.  
  6. data_path = 'path/to/folder/' 
  7. df = (pd.read_csv(filepath_or_buffer=os.path.join(data_path, 'master.csv'))  
  8. .rename(columns={'suicides/100k pop' : 'suicides_per_100k', ' gdp_for_year ($) ' : 'gdp_year',  'gdp_per_capita ($)' : 'gdp_capita', 'country-year' : 'country_year'})  
  9. .assign(gdp_year=lambda _df: _df['gdp_year'].str 
  10. .replace(',','').astype(np.int64)) ) 

提示:如果你讀取了一個大文件,在 read_csv(https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html)中參數設定為 chunksize=N,這會返回一個可以輸出 DataFrame 對象的迭代器。

這里有一些關于這個數據集的描述:

  1. >>> df.columnsIndex(['country', 'year', 'sex', 'age', 'suicides_no', 'population', 'suicides_per_100k', 'country_year', 'HDI for year', 'gdp_year', 'gdp_capita', 'generation'], dtype='object'

這里有 101 個國家、年份從 1985 到 2016、兩種性別、六個年代以及六個年齡組。有一些獲得這些信息的方法:

可以用 unique() 和 nunique() 獲取列內唯一的值(或唯一值的數量);

  1. >>> df['generation'].unique() 
  2. array(['Generation X', 'Silent', 'G.I. Generation', 'Boomers', 'Millenials', 'Generation Z'], dtype=object
  3. >>> df['country'].nunique() 
  4. 101 

可以用 describe() 輸出每一列不同的統計數據(例如最小值、最大值、平均值、總數等),如果指定 include='all',會針對每一列目標輸出唯一元素的數量和出現最多元素的數量;

可以用 head() 和 tail() 來可視化數據框的一小部分。

通過這些方法,你可以迅速了解正在分析的表格文件。

二、內存優化

在處理數據之前,了解數據并為數據框的每一列選擇合適的類型是很重要的一步。

在內部,Pandas 將數據框存儲為不同類型的 numpy 數組(比如一個 float64 矩陣,一個 int32 矩陣)。

有兩種可以大幅降低內存消耗的方法。

  1. import pandas as pd 
  2.  
  3. def mem_usage(df: pd.DataFrame) -> str:  
  4. """This method styles the memory usage of a DataFrame to be readable as MB. Parameters ---------- df: pd.DataFrame Data frame to measure. Returns ------- str Complete memory usage as a string formatted for MB. """  
  5.     return f'{df.memory_usage(deep=True).sum() / 1024 ** 2 : 3.2f} MB' 
  6.  
  7. def convert_df(df: pd.DataFrame, deep_copy: bool = True) -> pd.DataFrame:  
  8. """Automatically converts columns that are worth stored as ``categorical`` dtype. Parameters ---------- df: pd.DataFrame Data frame to convert. deep_copy: bool Whether or not to perform a deep copy of the original data frame. Returns ------- pd.DataFrame Optimized copy of the input data frame. """  
  9.     return df.copy(deep=deep_copy).astype({ col: 'category' for col in df.columns if df[col].nunique() / df[col].shape[0] < 0.5}) 

Pandas 提出了一種叫做 memory_usage() 的方法,這種方法可以分析數據框的內存消耗。在代碼中,指定 deep=True 來確保考慮到了實際的系統使用情況。

memory_usage():

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.memory_usage.html

了解列的類型

(https://pandas.pydata.org/pandas-docs/stable/getting_started/basics.html#basics-dtypes)很重要。它可以通過兩種簡單的方法節省高達 90% 的內存使用:

  • 了解數據框使用的類型;
  • 了解數據框可以使用哪種類型來減少內存的使用(例如,price 這一列值在 0 到 59 之間,只帶有一位小數,使用 float64 類型可能會產生不必要的內存開銷)

除了降低數值類型的大小(用 int32 而不是 int64)外,Pandas 還提出了分類類型:https://pandas.pydata.org/pandas-docs/stable/user_guide/categorical.html

如果你是用 R 語言的開發人員,你可能覺得它和 factor 類型是一樣的。

這種分類類型允許用索引替換重復值,還可以把實際值存在其他位置。教科書中的例子是國家。和多次存儲相同的字符串「瑞士」或「波蘭」比起來,為什么不簡單地用 0 和 1 替換它們,并存儲在字典中呢?

  1. categorical_dict = {0: 'Switzerland', 1: 'Poland'} 

Pandas 做了幾乎相同的工作,同時添加了所有的方法,可以實際使用這種類型,并且仍然能夠顯示國家的名稱。

回到 convert_df() 方法,如果這一列中的唯一值小于 50%,它會自動將列類型轉換成 category。這個數是任意的,但是因為數據框中類型的轉換意味著在 numpy 數組間移動數據,因此我們得到的必須比失去的多。

接下來看看數據中會發生什么。

  1. >>> mem_usage(df) 
  2. 10.28 MB 
  3. >>> mem_usage(df.set_index(['country', 'year', 'sex', 'age'])) 
  4. 5.00 MB 
  5. >>> mem_usage(convert_df(df)) 
  6. 1.40 MB 
  7. >>> mem_usage(convert_df(df.set_index(['country', 'year', 'sex', 'age']))) 
  8. 1.40 MB 

通過使用「智能」轉換器,數據框使用的內存幾乎減少了 10 倍(準確地說是 7.34 倍)。

三、索引

Pandas 是強大的,但也需要付出一些代價。當你加載 DataFrame 時,它會創建索引并將數據存儲在 numpy 數組中。這是什么意思?一旦加載了數據框,只要正確管理索引,就可以快速地訪問數據。

訪問數據的方法主要有兩種,分別是通過索引和查詢訪問。根據具體情況,你只能選擇其中一種。但在大多數情況中,索引(和多索引)都是最好的選擇。我們來看下面的例子:

  1. >>> %%time 
  2. >>> df.query('country == "Albania" and year == 1987 and sex == "male" and age == "25-34 years"') 
  3. CPU times: user 7.27 ms, sys: 751 µs, total: 8.02 ms 
  4. # ================== 
  5. >>> %%time 
  6. >>> mi_df.loc['Albania', 1987, 'male', '25-34 years'] 

什么?加速 20 倍?

你要問自己了,創建這個多索引要多長時間?

  1. %%time 
  2. mi_df = df.set_index(['country', 'year', 'sex', 'age']) 
  3. CPU times: user 10.8 ms, sys: 2.2 ms, total: 13 ms 

通過查詢訪問數據的時間是 1.5 倍。如果你只想檢索一次數據(這種情況很少發生),查詢是正確的方法。否則,你一定要堅持用索引,CPU 會為此感激你的。

.set_index(drop=False) 允許不刪除用作新索引的列。

.loc[]/.iloc[] 方法可以很好地讀取數據框,但無法修改數據框。如果需要手動構建(比如使用循環),那就要考慮其他的數據結構了(比如字典、列表等),在準備好所有數據后,創建 DataFrame。否則,對于 DataFrame 中的每一個新行,Pandas 都會更新索引,這可不是簡單的哈希映射。

  1. >>> (pd.DataFrame({'a':range(2), 'b': range(2)}, index=['a', 'a']) .loc['a'])  
  2.   a b 
  3. a 0 0 
  4. a 1 1 

因此,未排序的索引可以降低性能。為了檢查索引是否已經排序并對它排序,主要有兩種方法:

  1. %%time 
  2. >>> mi_df.sort_index() 
  3. CPU times: user 34.8 ms, sys: 1.63 ms, total: 36.5 ms 
  4. >>> mi_df.index.is_monotonicTrue 

更多詳情請參閱:

  • Pandas 高級索引用戶指南:https://pandas.pydata.org/pandas-docs/stable/user_guide/advanced.html;
  • Pandas 庫中的索引代碼:https://github.com/pandas-dev/pandas/blob/master/pandas/core/indexing.py。

四、方法鏈

使用 DataFrame 的方法鏈是鏈接多個返回 DataFrame 方法的行為,因此它們都是來自 DataFrame 類的方法。在現在的 Pandas 版本中,使用方法鏈是為了不存儲中間變量并避免出現如下情況:

  1. import numpy as np 
  2. import pandas as pd 
  3. df = pd.DataFrame({'a_column': [1, -999, -999], 'powerless_column': [2, 3, 4], 'int_column': [1, 1, -1]})  
  4. df['a_column'] = df['a_column'].replace(-999, np.nan)  
  5. df['power_column'] = df['powerless_column'] ** 2  
  6. df['real_column'] = df['int_column'].astype(np.float64)  
  7. dfdf = df.apply(lambda _df: _df.replace(4, np.nan))  
  8. dfdf = df.dropna(how='all'

用下面的鏈替換:

  1. df = (pd.DataFrame({'a_column': [1, -999, -999],  
  2. 'powerless_column': [2, 3, 4],  
  3. 'int_column': [1, 1, -1]})  
  4. .assign(a_column=lambda _df: _df['a_column'].replace(-999, np.nan))  
  5. .assign(power_column=lambda _df: _df['powerless_column'] ** 2)  
  6. .assign(real_column=lambda _df: _df['int_column'].astype(np.float64))  
  7. .apply(lambda _df: _df.replace(4, np.nan))  
  8. .dropna(how='all') ) 

說實話,第二段代碼更漂亮也更簡潔。

方法鏈的工具箱是由不同的方法(比如 apply、assign、loc、query、pipe、groupby 以及 agg)組成的,這些方法的輸出都是 DataFrame 對象或 Series 對象(或 DataFrameGroupBy)。

了解它們最好的方法就是實際使用。舉個簡單的例子:

  1. (df  
  2. .groupby('age')  
  3. .agg({'generation':'unique'})  
  4. .rename(columns={'generation':'unique_generation'}) 
  5. # Recommended from v0.25 
  6. # .agg(unique_generation=('generation', 'unique'))) 

獲得每個年齡范圍中所有唯一年代標簽的簡單鏈。

在得到的數據框中,「年齡」列是索引

除了了解到「X 代」覆蓋了三個年齡組外,分解這條鏈。第一步是對年齡組分組。這一方法返回了一個 DataFrameGroupBy 對象,在這個對象中,通過選擇組的唯一年代標簽聚合了每一組。

在這種情況下,聚合方法是「unique」方法,但它也可以接受任何(匿名)函數。

在 0.25 版本中,Pandas 引入了使用 agg 的新方法:

https://dev.pandas.io/whatsnew/v0.25.0.html#groupby-aggregation-with-relabeling。

  1. (df  
  2. .groupby(['country', 'year'])  
  3. .agg({'suicides_per_100k': 'sum'})  
  4. .rename(columns={'suicides_per_100k':'suicides_sum'}) 
  5. # Recommended from v0.25 
  6. # .agg(suicides_sum=('suicides_per_100k', 'sum')) .sort_values('suicides_sum', ascending=False) .head(10)) 

用排序值(sort_values)和 head 得到自殺率排前十的國家和年份

  1. (df  
  2. .groupby(['country', 'year'])  
  3. .agg({'suicides_per_100k': 'sum'})  
  4. .rename(columns={'suicides_per_100k':'suicides_sum'}) 
  5. # Recommended from v0.25 
  6. # .agg(suicides_sum=('suicides_per_100k', 'sum'))  
  7. .nlargest(10, columns='suicides_sum')) 

用排序值 nlargest 得到自殺率排前十的國家和年份

在這些例子中,輸出都是一樣的:有兩個指標(國家和年份)的 MultiIndex 的 DataFrame,還有包含排序后的 10 個最大值的新列 suicides_sum。

「國家」和「年份」列是索引

nlargest(10) 比 sort_values(ascending=False).head(10) 更有效。

另一個有趣的方法是 unstack:

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.unstack.html,這種方法允許轉動索引水平。

  1. (mi_df  
  2. .loc[('Switzerland', 2000)]  
  3. .unstack('sex') [['suicides_no', 'population']]) 

「age」是索引,列「suicides_no」和「population」都有第二個水平列「sex」。

下一個方法 pipe 是最通用的方法之一。這種方法允許管道運算(就像在 shell 腳本中)執行比鏈更多的運算。

管道的一個簡單但強大的用法是記錄不同的信息。

  1. def log_head(df, head_count=10):  
  2.     print(df.head(head_count))  
  3.     return df 
  4.  
  5. def log_columns(df):  
  6.     print(df.columns)  
  7.     return df 
  8.  
  9. def log_shape(df):  
  10.     print(f'shape = {df.shape}')  
  11.     return df 

和 pipe 一起使用的不同記錄函數。

舉個例子,我們想驗證和 year 列相比,country_year 是否正確:

  1. (df  
  2. .assign(valid_cy=lambda _serie: _serie.apply(  
  3. lambda _row: re.split(r'(?=\d{4})',  
  4. _row['country_year'])[1] == str(_row['year']), axis=1))  
  5. .query('valid_cy == False')  
  6. .pipe(log_shape)) 

用來驗證「country_year」列中年份的管道。

管道的輸出是 DataFrame,但它也可以在標準輸出(console/REPL)中打印。

  1. shape = (0, 13) 

你也可以在一條鏈中用不同的 pipe。

  1. (df .pipe(log_shape)  
  2. .query('sex == "female"')  
  3. .groupby(['year', 'country'])  
  4. .agg({'suicides_per_100k':'sum'})  
  5. .pipe(log_shape)  
  6. .rename(columns={'suicides_per_100k':'sum_suicides_per_100k_female'}) 
  7. # Recommended from v0.25 
  8. # .agg(sum_suicides_per_100k_female=('suicides_per_100k', 'sum'))  
  9. .nlargest(n=10columns=['sum_suicides_per_100k_female'])) 

女性自殺數量最高的國家和年份。

生成的 DataFrame 如下所示:

索引是「年份」和「國家」

標準輸出的打印如下所示:

  1. shape = (27820, 12) 
  2. shape = (2321, 1) 

除了記錄到控制臺外,pipe 還可以直接在數據框的列上應用函數。

  1. from sklearn.preprocessing import MinMaxScaler 
  2.  
  3. def norm_df(df, columns):  
  4.     return df.assign(**{col: MinMaxScaler().fit_transform(df[[col]].values.astype(float))   
  5.     for col in columns})   
  6.  
  7. for sex in ['male', 'female']:  
  8.     print(sex)  
  9.     print( df .query(f'sex == "{sex}"')  
  10.     .groupby(['country'])  
  11.     .agg({'suicides_per_100k': 'sum', 'gdp_year': 'mean'})  
  12.     .rename(columns={'suicides_per_100k':'suicides_per_100k_sum',  'gdp_year': 'gdp_year_mean'}) 
  13.     # Recommended in v0.25 
  14.     # .agg(suicides_per_100k=('suicides_per_100k_sum', 'sum'),  
  15.     # gdp_year=('gdp_year_mean', 'mean'))  
  16.     .pipe(norm_df, columns=['suicides_per_100k_sum', 'gdp_year_mean'])  
  17.     .corr(method='spearman') )  
  18.     print('\n') 

自殺數量是否和 GDP 的下降相關?是否和性別相關?

上面的代碼在控制臺中的打印如下所示:

  1. male 
  2.                     suicides_per_100k_sum gdp_year_mean 
  3. suicides_per_100k_sum       1.000000         0.421218 
  4. gdp_year_mean               0.421218         1.000000 
  1. female 
  2.                      suicides_per_100k_sum gdp_year_mean 
  3. suicides_per_100k_sum        1.000000         0.452343 
  4. gdp_year_mean                0.452343  

深入研究代碼。norm_df() 將一個 DataFrame 和用 MinMaxScaling 擴展列的列表當做輸入。使用字典理解,創建一個字典 {column_name: method, …},然后將其解壓為 assign() 函數的參數 (colunmn_name=method, …)。

在這種特殊情況下,min-max 縮放不會改變對應的輸出:

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.corr.html,它僅用于參數。

在(遙遠的?)未來,緩式評估(lazy evaluation)可能出現在方法鏈中,所以在鏈上做一些投資可能是一個好想法。

最后(隨機)的技巧

下面的提示很有用,但不適用于前面的任何部分:

itertuples() 可以更高效地遍歷數據框的行;

  1. >>> %%time 
  2. >>> for row in df.iterrows(): continue 
  3. CPU times: user 1.97 s, sys: 17.3 ms, total: 1.99 s 
  4. >>> for tup in df.itertuples(): continue 
  5. CPU times: user 55.9 ms, sys: 2.85 ms, total: 58.8 ms 

注意:tup 是一個 namedtuple

join() 用了 merge();在 Jupyter 筆記本中,在代碼塊的開頭寫上 %%time,可以有效地測量時間;UInt8 類:https://pandas.pydata.org/pandas-docs/stable/user_guide/gotchas.html#support-for-integer-na支持帶有整數的 NaN 值;

記住,任何密集的 I/O(例如展開大型 CSV 存儲)用低級方法都會執行得更好(盡可能多地用 Python 的核心函數)。

還有一些本文沒有涉及到的有用的方法和數據結構,這些方法和數據結構都很值得花時間去理解:

  • 數據透視表:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.pivot.html?source=post_page
  • 時間序列/日期功能:https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html?source=post_page;
  • 繪圖:https://pandas.pydata.org/pandas-docs/stable/user_guide/visualization.html?source=post_page。

總結

希望你可以因為這篇簡短的文章,更好地理解 Pandas 背后的工作原理,以及 Pandas 庫的發展現狀。本文還展示了不同的用于優化數據框內存以及快速分析數據的工具。希望對現在的你來說,索引和查找的概念能更加清晰。最后,你還可以試著用方法鏈寫更長的鏈。

這里還有一些筆記:https://github.com/unit8co/medium-pandas-wan?source=post_page

除了文中的所有代碼外,還包括簡單數據索引數據框(df)和多索引數據框(mi_df)性能的定時指標。

[[273939]]

熟能生巧,所以繼續修煉技能,并幫助我們建立一個更好的世界吧。

PS:有時候純用 Numpy 會更快。

原文鏈接:

https://medium.com/unit8-machine-learning-publication/from-pandas-wan-to-pandas-master-4860cf0ce442

【本文是51CTO專欄機構“機器之心”的原創譯文,微信公眾號“機器之心( id: almosthuman2014)”】 

戳這里,看該作者更多好文

 

責任編輯:趙寧寧 來源: 51CTO專欄
相關推薦

2020-03-30 11:32:49

IT技術面試

2018-07-30 09:33:21

2019-04-16 13:13:56

碼農程序員開發

2018-05-15 08:35:37

AI微軟人工智能

2018-02-08 08:35:23

區塊鏈食品安全食品供應商

2020-04-22 16:21:57

HTTP3數據HTTP2

2018-04-19 14:42:48

深度學習DL數據集

2020-11-16 11:10:21

代碼開發工具

2018-02-08 08:26:54

紅包春節支付寶

2018-04-19 10:33:39

DevOps開源工具

2022-03-28 13:04:10

機器學習模型計算機

2020-12-30 10:20:03

數據技術架構

2017-09-06 09:47:05

前端技術專家建議

2018-01-02 16:42:42

iPhone電池Apple

2024-08-16 14:02:00

2018-01-29 13:41:06

數據庫區塊鏈比特幣

2022-01-25 15:00:07

AI技術趨勢

2025-04-27 19:37:31

MCP服務器OpenAI

2020-05-22 13:32:24

可視化詞云圖數據
點贊
收藏

51CTO技術棧公眾號

日韩精品一线二线三线| 国产精品第三页| 久草免费资源站| 免费毛片在线看片免费丝瓜视频 | 国产一区不卡| 欧美精选一区二区| 成人黄色大片网站| 黄色电影免费在线看| 极品少妇一区二区| 91成人在线观看国产| 婷婷综合在线视频| 国产一区二区在线视频你懂的| 色婷婷精品大视频在线蜜桃视频| 国产成人精品免费看在线播放| 人妻视频一区二区三区| 美女视频一区在线观看| 97精品国产97久久久久久免费 | 亚洲日本在线a| 久久久亚洲综合网站| 91美女精品网站| 亚洲一区二区三区四区五区午夜| 日韩在线观看免费av| 中国极品少妇xxxx| 日韩123区| 国产精品污网站| 精品一区二区三区免费毛片| 99久久精品国产一区色| 日韩黄色免费网站| 97精品一区二区视频在线观看| 久久精品日韩无码| 国产精品嫩模av在线| 精品对白一区国产伦| 亚洲一区二区中文字幕在线观看| 欧美18—19sex性hd| 亚洲大型综合色站| 欧美日韩中文字幕在线播放| 成人在线免费看| 91小视频免费看| 国产伦精品一区二区三区四区视频| 伊人色综合久久久| 日产国产高清一区二区三区| 欧美一级电影免费在线观看| 日本三级中文字幕| 国内成人在线| 九色精品美女在线| 欧美爱爱小视频| 中文精品电影| 不卡av电影院| 国产又粗又硬又长又爽| 99久久这里只有精品| 自拍偷拍亚洲欧美| 天堂网中文在线观看| 第四色成人网| 一区二区在线视频播放| 美女被到爽高潮视频| 蜜臀av免费一区二区三区| 亚洲国产成人久久| 亚洲欧美色图视频| 伊人久久大香线蕉av不卡| 国产午夜精品麻豆| 日本高清www| 国产真实有声精品录音| 亚洲视频一区二区| 少妇愉情理伦三级| 欧美r级电影| 久久精品国产综合| 国产高潮流白浆| 国产精品xvideos88| 欧美疯狂xxxx大交乱88av| 久久亚洲AV无码| 亚洲狼人精品一区二区三区| 91国产视频在线播放| 丁香六月婷婷综合| 日本强好片久久久久久aaa| 国产精品流白浆视频| 国产精品高潮呻吟av| 国产精品正在播放| 精品国产乱码久久久久久丨区2区| 亚洲欧洲国产综合| 久久久精品蜜桃| 一区二区三区四区视频在线观看| 岛国成人毛片| 精品高清美女精品国产区| 久久国产乱子伦免费精品| 影音成人av| 欧美精品久久99久久在免费线| 三级网站免费看| 秋霞影视一区二区三区| 一区二区三区日韩在线| 超碰手机在线观看| 免费亚洲一区| 亚洲一区二区在线| 亚洲欧美自偷自拍| 国产精品久久久久国产精品日日| 亚洲国产一二三精品无码| 99热99re6国产在线播放| 精品国产鲁一鲁一区二区张丽| 狠狠热免费视频| 欧美欧美在线| 亚洲性生活视频| 国产av无码专区亚洲av毛网站| 亚洲福利久久| 国产精品视频yy9099| 亚洲欧美激情另类| 国产日韩欧美亚洲| 国产人妻777人伦精品hd| 成人深夜福利| 日韩av中文字幕在线免费观看| 国产一级淫片久久久片a级| 在线视频观看日韩| 成人精品一区二区三区| 毛片网站在线观看| 一片黄亚洲嫩模| 91看片破解版| 国产精品一区二区三区av麻 | 亚洲v欧美v另类v综合v日韩v| 综合久久2019| 欧美精品久久久久久久久老牛影院| 在线免费观看a级片| 欧美在线网站| 国产精品天天狠天天看| 欧美成人片在线| 亚洲一区二区中文在线| 色呦色呦色精品| 国产毛片一区二区三区| 91av在线影院| 日本精品999| 亚洲人成网站影音先锋播放| 91视频免费版污| 亚洲国产网址| 97视频国产在线| 精品久久久久久亚洲综合网站 | 日本一区精品| 成人午夜视屏| 日韩国产欧美精品在线| 国产黄色片在线免费观看| 91久久视频| 成人自拍网站| 欧美hdxxxx| 欧美一区二区三区在线| jizz18女人高潮| 视频一区二区中文字幕| 农村寡妇一区二区三区| 国产777精品精品热热热一区二区| 日韩女优av电影| www.超碰在线观看| 国产精品一二三在| 男女激烈动态图| 精品中文字幕一区二区三区四区| 久久久精品久久久久| 国产精品久久久久久久久久久久久久久久| 国产欧美一区二区精品忘忧草| 成人三级视频在线播放| 免费黄色成人| 国产精欧美一区二区三区| 黄色av网站在线| 欧美亚洲国产一区二区三区va | 亚洲精华国产精华精华液网站| 国产精品久久久久久久浪潮网站 | 成人丝袜视频网| 精品人妻少妇一区二区| 精品人人人人| 日本免费久久高清视频| 成人在线观看免费| 欧美日本在线看| 国产黄色的视频| 成人午夜免费视频| 日韩精品一区在线视频| 网友自拍一区| 国产精品国产三级国产专播精品人 | 日韩一级成人av| 国产五月天婷婷| 久久综合九色综合97婷婷女人| 18岁视频在线观看| 日韩一区二区三区免费播放| 亚洲va欧美va国产综合剧情| 丁香花电影在线观看完整版| 日韩精品在线播放| 中文字幕免费在线看| 亚洲色图视频网| 国产黑丝一区二区| 日本亚洲免费观看| 精品视频在线观看一区二区| 欧美大片网址| 国产精品久久色| av在线看片| 亚洲精品国产精品久久清纯直播| 国产一级片免费视频| 亚洲欧美成aⅴ人在线观看| 捆绑凌虐一区二区三区| 天堂在线一区二区| 喜爱夜蒲2在线| 伊人久久大香线蕉| 91网站在线免费观看| 24小时免费看片在线观看| 在线视频欧美日韩精品| av网站在线免费看| 一本大道久久a久久精品综合| 小泽玛利亚一区二区免费| 91亚洲精品久久久蜜桃| 三级黄色片免费看| 日韩福利电影在线观看| 精品人妻人人做人人爽| 精品一级毛片| 国产欧美一区二区视频| 久久三级毛片| 国外成人在线直播| 黄av在线播放| 在线观看91久久久久久| 手机看片国产1024| 欧美一二三四区在线| 乱子伦一区二区三区| 午夜精品福利在线| 成人性生活毛片| 国产免费成人在线视频| 国产精品无码电影| 国产精品亚洲午夜一区二区三区| 国产一级特黄a大片免费| 日韩一级大片| 亚洲精品少妇一区二区| 日韩中文在线电影| 欧美一区二区三区四区夜夜大片 | 日韩西西人体444www| 亚洲综合一区中| 日本道免费精品一区二区三区| 日本在线视频免费观看| 一区二区视频免费在线观看| 中文字幕在线观看二区| 国产偷v国产偷v亚洲高清| 亚洲啪av永久无码精品放毛片| 国产一区亚洲一区| 一级淫片在线观看| 久久99国产精品免费网站| 日韩一级理论片| 久久这里只有| 欧美性猛交久久久乱大交小说| 日韩天天综合| 久久成人免费观看| 尤物在线精品| 一本久道高清无码视频| 亚洲一本视频| 欧美日韩福利在线| 亚洲精品欧美| 加勒比成人在线| 国产精品久久久久久模特 | 免费高清在线视频一区·| 国产精品少妇在线视频| 天堂av在线一区| 午夜免费精品视频| 日本欧美久久久久免费播放网| 成年人黄色片视频| 日韩av午夜在线观看| 手机在线免费观看毛片| 久久精品国产99国产| www.这里只有精品| 狠狠色丁香婷综合久久| 亚洲一区二区三区四区精品| 国产精品资源在线观看| 国产综合内射日韩久| 99精品视频在线观看免费| 亚洲国产欧美视频| 久久精品日韩一区二区三区| 中文字幕av久久爽一区| 国产精品伦理在线| 动漫性做爰视频| 亚洲国产日产av| 中文字幕激情小说| 欧美又粗又大又爽| 国产麻豆91视频| 欧美一级电影网站| 亚洲欧洲精品视频| 这里只有精品在线观看| a级毛片免费观看在线| 韩国国内大量揄拍精品视频| 最新中文字幕在线播放| 国产精品流白浆视频| 日韩区欧美区| 久久九九视频| 日韩欧美在线中字| 久久久久久www| 免费久久精品视频| 男人添女人荫蒂国产| 久久视频一区二区| 久久av红桃一区二区禁漫| 亚洲综合色网站| 波多野结衣一区二区三区四区| 91精品国产福利| 亚洲三区在线播放| 深夜成人在线观看| 99在线视频影院| 国产欧美日韩中文字幕在线| 亚洲小说春色综合另类电影| 欧美精品尤物在线| 91tv官网精品成人亚洲| 无码人妻丰满熟妇区96| 精品一区二区在线看| 中文字幕5566| 亚洲精品视频免费观看| 成人免费毛片视频| 日韩欧美黄色影院| 国产剧情在线观看| 久久久久久久久久国产精品| 成人国产精品入口免费视频| 国产精品一区二| 欧美国产一区二区三区激情无套| 9久久9毛片又大又硬又粗| 极品尤物av久久免费看| www在线观看免费视频| 亚洲一二三四区| 国产有码在线观看| 亚洲欧美中文日韩在线| 丁香花在线电影小说观看| 91九色国产在线| 日韩国产一区二区三区| 激情综合在线观看| 成人免费毛片嘿嘿连载视频| 国产天堂av在线| 91久久国产综合久久| 天堂91在线| 久久久久久久网站| 久久伦理中文字幕| 亚洲一区二区三区免费看| 久久激情婷婷| 国产伦精品一区二区三区妓女| 亚洲自拍偷拍九九九| 国产免费高清av| 色诱女教师一区二区三区| 成人做爰视频www网站小优视频| 国产日韩亚洲精品| 欧美日韩一区自拍| 黄色片子免费看| 自拍av一区二区三区| 最近中文字幕在线观看| 国产亚洲精品一区二555| 在线观看欧美日韩电影| 久久亚洲午夜电影| 亚洲在线播放| 久久人人爽人人爽人人片| 五月婷婷色综合| 天天综合在线视频| 69久久夜色精品国产69| 欧美freesex8一10精品| 欧美在线一区视频| 91在线一区二区三区| 国产免费av一区二区| 日韩精品亚洲元码| 亚洲同志男男gay1069网站| 久久免费一区| 久久午夜影视| 亚洲精品一区二区三区影院忠贞| 色94色欧美sute亚洲线路一ni | 2020国产精品极品色在线观看| 免费看污污视频| 丁香婷婷综合色啪| 99精品视频99| 亚洲欧洲国产伦综合| 日韩和的一区二在线| 亚洲7777| 国产九九视频一区二区三区| 久久av高潮av无码av喷吹| 精品国产亚洲在线| 中文字幕在线高清| 天天爽天天狠久久久| 狠狠色狠狠色综合系列| 九热这里只有精品| 亚洲欧美在线免费| 四虎国产精品免费久久| 美女av免费观看| 91美女在线观看| 国产一级精品毛片| 美女少妇精品视频| 久久影视三级福利片| 日本三区在线观看| 国产精品污污网站在线观看| 性猛交xxxx乱大交孕妇印度| 欧美精品久久久久久久免费观看| 青青草这里只有精品| 97超碰人人爽| 亚洲一区二区中文在线| 欧美成人免费| 亚洲综合国产精品| 在线一区欧美| 娇小11一12╳yⅹ╳毛片| 日韩精品一区在线观看| 深夜成人在线| 亚洲午夜在线观看| 成人性生交大片免费| 成年人视频免费| 欧美日韩国产123| 国产欧美亚洲精品a| 国模大尺度视频| 日本久久一区二区| 亚洲丝袜精品| 日韩免费一区二区三区| 国产凹凸在线观看一区二区| 国产一区二区视频免费| 欧美黄色免费网站| 色综合久久网| 中文字幕av网址| 日韩一区二区免费高清|