<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          14個(gè)pandas神操作,手把手教你寫代碼

          共 11224字,需瀏覽 23分鐘

           ·

          2021-08-31 05:00


          導(dǎo)讀:Pandas是Python數(shù)據(jù)分析的利器,也是各種數(shù)據(jù)建模的標(biāo)準(zhǔn)工具。本文帶大家入門Pandas,將介紹Python語言、Python數(shù)據(jù)生態(tài)和Pandas的一些基本功能。



          在Python語言應(yīng)用生態(tài)中,數(shù)據(jù)科學(xué)領(lǐng)域近年來十分熱門。作為數(shù)據(jù)科學(xué)中一個(gè)非常基礎(chǔ)的庫,Pandas受到了廣泛關(guān)注。Pandas可以將現(xiàn)實(shí)中來源多樣的數(shù)據(jù)進(jìn)行靈活處理和分析。



          01
          Pandas是什么


          很多初學(xué)者可能有這樣一個(gè)疑問:“我想學(xué)的是Python數(shù)據(jù)分析,為什么經(jīng)常會(huì)被引導(dǎo)到Pandas上去?”雖然這兩個(gè)東西都是以P開頭的,但它們并不是同一個(gè)層面的東西。簡單來說,Pandas是Python這門編程語言中一個(gè)專門用來做數(shù)據(jù)分析的工具,它們的關(guān)系如圖1所示。接下來我們就說說Python是什么,Pandas又是什么。

          圖1 Pandas和Python的關(guān)系



          Python簡介


          Python是一門強(qiáng)大的編程語言,它簡單易學(xué),提供眾多高級(jí)數(shù)據(jù)結(jié)構(gòu),讓我們可以面向?qū)ο缶幊獭ython是一門解釋型語言,語法優(yōu)雅貼近人類自然語言,符合人類的認(rèn)知習(xí)慣。


          Python支持跨平臺(tái),能夠運(yùn)行在所有的常見操作系統(tǒng)上。Python在近期熱門的大數(shù)據(jù)、科學(xué)研究、機(jī)器學(xué)習(xí)、人工智能等領(lǐng)域大顯身手,并且?guī)缀踉谒蓄I(lǐng)域都有應(yīng)用,因此學(xué)習(xí)它十分劃算。


          Python由荷蘭人吉多·范羅蘇姆(Guido van Rossum)創(chuàng)造,第一版發(fā)布于1991年。關(guān)于為何有Python這個(gè)項(xiàng)目,吉多·范羅蘇姆在1996年曾寫道:6年前,也就是1989年12月,我在尋找一門“課余”編程項(xiàng)目來打發(fā)圣誕節(jié)前后的時(shí)間。到時(shí)我的辦公室會(huì)關(guān)門,而我只有一臺(tái)家用電腦,沒有什么其他東西。我決定為我當(dāng)時(shí)正在構(gòu)思的新的腳本語言寫一個(gè)解釋器,它是ABC語言的后代,對(duì)UNIX/C程序員會(huì)有吸引力。當(dāng)時(shí)我對(duì)項(xiàng)目叫什么名字并不太在乎,由于我是《蒙提·派森的飛行馬戲團(tuán)》的狂熱愛好者,我就選擇了用Python作為項(xiàng)目的名字。


          《蒙提·派森的飛行馬戲團(tuán)》(Monty Python’s Flying Circus)是BBC播出的英國電視喜劇劇集,蒙提·派森(Monty Python)是創(chuàng)作該劇的六人喜劇團(tuán)隊(duì),由此可見,Python雖原意為蟒蛇,但吉多·范羅蘇姆用它來命名一門開發(fā)語言,并非出于他對(duì)蟒蛇的喜愛,大家不必恐懼。


          Python 2.0于2000年10月16日發(fā)布。Python 3.0于2008年12月3日發(fā)布,此版不完全兼容之前的Python源代碼。目前Python的正式版已經(jīng)更新到3.9版本,且官方不再維護(hù)2.0版本,因此建議初學(xué)者(包括已經(jīng)在學(xué)習(xí)的)至少從3.6版本開始學(xué)習(xí)Python,之后的版本功能差異不會(huì)太大。



          Pandas簡介


          Pandas是使用Python語言開發(fā)的用于數(shù)據(jù)處理和數(shù)據(jù)分析的第三方庫。它擅長處理數(shù)字型數(shù)據(jù)和時(shí)間序列數(shù)據(jù),當(dāng)然文本型的數(shù)據(jù)也能輕松處理。


          作為Python的三方庫,Pandas是建構(gòu)在Python的基礎(chǔ)上的,它封裝了一些復(fù)雜的代碼實(shí)現(xiàn)過程,我們只要調(diào)用它的方法就能輕松實(shí)現(xiàn)我們的需求。


          Python中的庫、框架、包意義基本相同,都是別人造好的輪子,我們可以直接使用,以減少重復(fù)的邏輯代碼。正是由于有眾多覆蓋各個(gè)領(lǐng)域的框架,我們使用起Python來才能簡單高效,而不用關(guān)注技術(shù)實(shí)現(xiàn)細(xì)節(jié)。


          Pandas由Wes McKinney于2008年開發(fā)。McKinney當(dāng)時(shí)在紐約的一家金融服務(wù)機(jī)構(gòu)工作,金融數(shù)據(jù)分析需要一個(gè)健壯和超快速的數(shù)據(jù)分析工具,于是他就開發(fā)出了Pandas。


          Pandas的命名跟熊貓無關(guān),而是來自計(jì)量經(jīng)濟(jì)學(xué)中的術(shù)語“面板數(shù)據(jù)”(Panel data)。面板數(shù)據(jù)是一種數(shù)據(jù)集的結(jié)構(gòu)類型,具有橫截面和時(shí)間序列兩個(gè)維度。不過,我們不必了解它,它只是一種靈感、思想來源。Pandas目前已經(jīng)更新到1.2.1版本。




          02
          Pandas的使用人群


          Pandas對(duì)數(shù)據(jù)的處理是為數(shù)據(jù)分析服務(wù)的,它所提供的各種數(shù)據(jù)處理方法、工具是基于數(shù)理統(tǒng)計(jì)學(xué)的,包含了日常應(yīng)用中的眾多數(shù)據(jù)分析方法。我們學(xué)習(xí)它不僅要掌控它的相應(yīng)技術(shù),還要從它的數(shù)據(jù)處理思路中學(xué)習(xí)數(shù)據(jù)分析的理論和方法。


          特別地,如果你想要成為數(shù)據(jù)分析師、數(shù)據(jù)產(chǎn)品經(jīng)理、數(shù)據(jù)開發(fā)工程師等與數(shù)據(jù)相關(guān)的工作者,學(xué)習(xí)Pandas能讓你深入數(shù)據(jù)理論和實(shí)踐,更好地理解和應(yīng)用數(shù)據(jù)。


          Pandas可以輕松應(yīng)對(duì)白領(lǐng)們?nèi)粘9ぷ髦械母鞣N表格數(shù)據(jù)處理需求,還應(yīng)用在金融、統(tǒng)計(jì)、數(shù)理研究、物理計(jì)算、社會(huì)科學(xué)、工程等領(lǐng)域。


          Pandas可以實(shí)現(xiàn)復(fù)雜的處理邏輯,這些往往是Excel等工具無法完成的,還可以自動(dòng)化、批量化,免去我們?cè)谔幚硐嗤拇罅繑?shù)據(jù)時(shí)的重復(fù)工作。


          Pandas可以實(shí)現(xiàn)非常震撼的可視化效果,它對(duì)接眾多令人賞心悅目的可視化庫,可以實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)交互效果。



          03
          Pandas的基本功能


          Pandas常用的基本功能如下:

          • 從Excel、CSV、網(wǎng)頁、SQL、剪貼板等文件或工具中讀取數(shù)據(jù);

          • 合并多個(gè)文件或者電子表格中的數(shù)據(jù),將數(shù)據(jù)拆分為獨(dú)立文件;

          • 數(shù)據(jù)清洗,如去重、處理缺失值、填充默認(rèn)值、補(bǔ)全格式、處理極端值等;

          • 建立高效的索引;

          • 支持大體量數(shù)據(jù);

          • 按一定業(yè)務(wù)邏輯插入計(jì)算后的列、刪除列;

          • 靈活方便的數(shù)據(jù)查詢、篩選;

          • 分組聚合數(shù)據(jù),可獨(dú)立指定分組后的各字段計(jì)算方式;

          • 數(shù)據(jù)的轉(zhuǎn)置,如行轉(zhuǎn)列、列轉(zhuǎn)行變更處理;

          • 連接數(shù)據(jù)庫,直接用SQL查詢數(shù)據(jù)并進(jìn)行處理;

          • 對(duì)時(shí)序數(shù)據(jù)進(jìn)行分組采樣,如按季、按月、按工作小時(shí),也可以自定義周期,如工作日;

          • 窗口計(jì)算,移動(dòng)窗口統(tǒng)計(jì)、日期移動(dòng)等;

          • 靈活的可視化圖表輸出,支持所有的統(tǒng)計(jì)圖形;

          • 為數(shù)據(jù)表格增加展示樣式,提高數(shù)據(jù)識(shí)別效率。




          04
          Pandas快速入門


          1、安裝導(dǎo)入


          首先安裝pandas庫。打開“終端”并執(zhí)行以下命令:


          pip install pandas matplotlib

          # 如網(wǎng)絡(luò)慢,可指定國內(nèi)源快速下載安裝

          pip install pandas matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple

          安裝完成后,在終端中啟動(dòng)Jupyter Notebook,給文件命名,如pandas-01。在Jupyter Notebook中導(dǎo)入Pandas,按慣例起別名pd:


          # 引入 Pandas庫,按慣例起別名pd

          import pandas as pd

          這樣,我們就可以使用pd調(diào)用Pandas的所有功能了。



          2、準(zhǔn)備數(shù)據(jù)集


          數(shù)據(jù)集(Data set或dataset),又稱為資料集、數(shù)據(jù)集合或資料集合,是一種由數(shù)據(jù)組成的集合,可以簡單理解成一個(gè)Excel表格。在分析處理數(shù)據(jù)時(shí),我們要先了解數(shù)據(jù)集。對(duì)所持有數(shù)據(jù)各字段業(yè)務(wù)意義的理解是分析數(shù)據(jù)的前提。


          介紹下我們后面會(huì)經(jīng)常用的數(shù)據(jù)集team.xlsx,可以從網(wǎng)址 https://www.gairuo.com/file/data/dataset/team.xlsx下載。它的內(nèi)容見表1。


          表1 team.xlsx的部分內(nèi)容


          這是一個(gè)學(xué)生各季度成績總表(節(jié)選),各列說明如下。

          • name:學(xué)生的姓名,這列沒有重復(fù)值,一個(gè)學(xué)生一行,即一條數(shù)據(jù),共100條。

          • team:所在的團(tuán)隊(duì)、班級(jí),這個(gè)數(shù)據(jù)會(huì)重復(fù)。

          • Q1~Q4:各個(gè)季度的成績,可能會(huì)有重復(fù)值。



          3、讀取數(shù)據(jù)


          了解了數(shù)據(jù)集的意義后,我們將數(shù)據(jù)讀取到Pandas里,變量名用df(DataFrame的縮寫,后續(xù)會(huì)介紹),它是Pandas二維數(shù)據(jù)的基礎(chǔ)結(jié)構(gòu)。


          import pandas as pd # 引入Pandas庫,按慣例起別名pd



          # 以下兩種效果一樣,如果是網(wǎng)址,它會(huì)自動(dòng)將數(shù)據(jù)下載到內(nèi)存

          df = pd.read_excel('https://www.gairuo.com/file/data/dataset/team.xlsx')

          df = pd.read_excel('team.xlsx'# 文件在notebook文件同一目錄下

          # 如果是CSV,使用pd.read_csv(),還支持很多類型的數(shù)據(jù)讀取


          這樣就把數(shù)據(jù)讀取到變量df中,輸入df看一下內(nèi)容,在Jupyter Notebook中的執(zhí)行效果如圖2所示。


          圖2 讀取數(shù)據(jù)的執(zhí)行效果


          其中:

          • 自動(dòng)增加了第一列,是Pandas為數(shù)據(jù)增加的索引,從0開始,程序不知道我們真正的業(yè)務(wù)索引,往往需要后面重新指定,使它有一定的業(yè)務(wù)意義;

          • 由于數(shù)據(jù)量大,自動(dòng)隱藏了中間部分,只顯示前后5條;

          • 底部顯示了行數(shù)和列數(shù)。


          4、查看數(shù)據(jù)


          讀取完數(shù)據(jù)后我們來查看一下數(shù)據(jù):


          df.head() # 查看前5條,括號(hào)里可以寫明你想看的條數(shù)

          df.tail() # 查看尾部5條

          df.sample(5) # 隨機(jī)查看5條


          查看前5條時(shí)的結(jié)果如圖3所示。


          圖3 查看df前5條數(shù)據(jù)



          5、驗(yàn)證數(shù)據(jù)


          拿到數(shù)據(jù),我們還需要驗(yàn)證一下數(shù)據(jù)是否加載正確,數(shù)據(jù)大小是否正常。下面是一些常用的代碼,可以執(zhí)行看看效果(一次執(zhí)行一行):


          df.shape # (100, 6) 查看行數(shù)和列數(shù)

          df.info() # 查看索引、數(shù)據(jù)類型和內(nèi)存信息

          df.describe() # 查看數(shù)值型列的匯總統(tǒng)計(jì)

          df.dtypes # 查看各字段類型

          df.axes # 顯示數(shù)據(jù)行和列名

          df.columns # 列名


          df.info()顯示有數(shù)據(jù)類型、索引情況、行列數(shù)、各字段數(shù)據(jù)類型、內(nèi)存占用等:


          df.info()

          <class 'pandas.core.frame.DataFrame'>

          RangeIndex: 100 entries, 0 to 99

          Data columns (total 6 columns):

           #   Column  Non-Null Count  Dtype

          ---  ------  --------------  -----

           0   name    100 non-null    object

           1   team    100 non-null    object

           2   Q1      100 non-null    int64

           3   Q2      100 non-null    int64

           4   Q3      100 non-null    int64

           5   Q4      100 non-null    int64

          dtypes: int64(4), object(2)

          memory usage: 4.8+ KB


          df.describe()會(huì)計(jì)算出各數(shù)字字段的總數(shù)(count)、平均數(shù)(mean)、標(biāo)準(zhǔn)差(std)、最小值(min)、四分位數(shù)和最大值(max):


          Out:

                         Q1          Q2          Q3          Q4

          count  100.000000  100.000000  100.000000  100.000000

          mean    49.200000   52.550000   52.670000   52.780000

          std     29.962603   29.845181   26.543677   27.818524

          min      1.000000    1.000000    1.000000    2.000000

          25%     19.500000   26.750000   29.500000   29.500000

          50%     51.500000   49.500000   55.000000   53.000000

          75%     74.250000   77.750000   76.250000   75.250000

          max     98.000000   99.000000   99.000000   99.000000



          6、建立索引


          以上數(shù)據(jù)真正業(yè)務(wù)意義上的索引是name列,所以我們需要使它成為索引:


          df.set_index('name', inplace=True# 建立索引并生效


          其中可選參數(shù)inplace=True會(huì)將指定好索引的數(shù)據(jù)再賦值給df使索引生效,否則索引不會(huì)生效。注意,這里并沒有修改原Excel,從我們讀取數(shù)據(jù)后就已經(jīng)和它沒有關(guān)系了,我們處理的是內(nèi)存中的df變量。


          將name建立索引后,就沒有從0開始的數(shù)字索引了,如圖4所示。

           

          圖4 將name設(shè)置為索引的執(zhí)行效果



          7、數(shù)據(jù)選取


          接下來,我們像Excel那樣,對(duì)數(shù)據(jù)做一些篩選操作。

          (1)選擇列

          選擇列的方法如下:


          # 查看指定列

          df['Q1']

          df.Q1 # 同上,如果列名符合Python變量名要求,可使用


          顯示如下內(nèi)容:


          df.Q1

          Out:

          0     89

          1     36

          2     57

          3     93

          4     65

                ..

          95    48

          96    21

          97    98

          98    11

          99    21

          Name: Q1, Length: 100, dtype: int64


          這里返回的是一個(gè)Series類型數(shù)據(jù),可以理解為數(shù)列,它也是帶索引的。之前建立的索引在這里發(fā)揮出了作用,否則我們的索引是一個(gè)數(shù)字,無法知道與之對(duì)應(yīng)的是誰的數(shù)據(jù)。


          選擇多列的可以用以下方法:


          # 選擇多列

          df[['team''Q1']] # 只看這兩列,注意括號(hào)

          df.loc[:, ['team''Q1']] # 和上一行效果一樣


          df.loc[x, y]是一個(gè)非常強(qiáng)大的數(shù)據(jù)選擇函數(shù),其中x代表行,y代表列,行和列都支持條件表達(dá)式,也支持類似列表那樣的切片(如果要用自然索引,需要用df.iloc[])。下面的例子中會(huì)進(jìn)行演示。


          (2)選擇行

          選擇行的方法如下:

          # 用指定索引選取

          df[df.index == 'Liver'# 指定姓名



          # 用自然索引選擇,類似列表的切片

          df[0:3] # 取前三行

          df[0:10:2] # 在前10個(gè)中每兩個(gè)取一個(gè)

          df.iloc[:10,:] # 前10個(gè)


          (3)指定行和列

          同時(shí)給定行和列的顯示范圍:

          df.loc['Ben''Q1':'Q4'# 只看Ben的四個(gè)季度成績

          df.loc['Eorge':'Alexander''team':'Q4'# 指定行區(qū)間


          (4)條件選擇

          按一定的條件顯示數(shù)據(jù):

          # 單一條件

          df[df.Q1 > 90] # Q1列大于90的

          df[df.team == 'C'# team列為'C'的

          df[df.index == 'Oscar'# 指定索引即原數(shù)據(jù)中的name



          # 組合條件

          df[(df['Q1'] > 90) & (df['team'] == 'C')] # and關(guān)系

          df[df['team'] == 'C'].loc[df.Q1>90] # 多重篩選



          8、排序


          Pandas的排序非常方便,示例如下:

          df.sort_values(by='Q1'# 按Q1列數(shù)據(jù)升序排列

          df.sort_values(by='Q1'ascending=False) # 降序



          df.sort_values(['team''Q1'], ascending=[True, False]) # team升序,Q1降序



          9、分組聚合


          我們可以實(shí)現(xiàn)類似SQL的groupby那樣的數(shù)據(jù)透視功能:


          df.groupby('team').sum() # 按團(tuán)隊(duì)分組對(duì)應(yīng)列相加

          df.groupby('team').mean() # 按團(tuán)隊(duì)分組對(duì)應(yīng)列求平均

          # 不同列不同的計(jì)算方法

          df.groupby('team').agg({'Q1': sum,  # 總和

                                  'Q2''count'# 總數(shù)

                                  'Q3':'mean'# 平均

                                  'Q4': max}) # 最大值


          統(tǒng)一聚合執(zhí)行后的效果如圖5所示。


          圖5 按team分組后求平均數(shù)


          不同計(jì)算方法聚合執(zhí)行后的效果如圖6所示。


          圖6 分組后每列用不同的方法聚合計(jì)算



          10、數(shù)據(jù)轉(zhuǎn)換


          對(duì)數(shù)據(jù)表進(jìn)行轉(zhuǎn)置,對(duì)類似圖6中的數(shù)據(jù)以A-Q1、E-Q4兩點(diǎn)連成的折線為軸對(duì)數(shù)據(jù)進(jìn)行翻轉(zhuǎn),效果如圖7所示,不過我們這里僅用sum聚合。


          df.groupby('team').sum().T


          圖7 對(duì)聚合后的數(shù)據(jù)進(jìn)行翻轉(zhuǎn)


          也可以試試以下代碼,看有什么效果:


          df.groupby('team').sum().stack()

          df.groupby('team').sum().unstack()



          11、增加列


          用Pandas增加一列非常方便,就與新定義一個(gè)字典的鍵值一樣。

          df['one'] = 1 # 增加一個(gè)固定值的列

          df['total'] = df.Q1 + df.Q2 + df.Q3 + df.Q4 # 增加總成績列

          # 將計(jì)算得來的結(jié)果賦值給新列

          df['total'] = df.loc[:,'Q1':'Q4'].apply(lambda x:sum(x), axis=1)

          df['total'] = df.sum(axis=1# 可以把所有為數(shù)字的列相加

          df['avg'] = df.total/4 # 增加平均成績列



          12、統(tǒng)計(jì)分析


          根據(jù)你的數(shù)據(jù)分析目標(biāo),試著使用以下函數(shù),看看能得到什么結(jié)論。

          df.mean() # 返回所有列的均值

          df.mean(1# 返回所有行的均值,下同

          df.corr() # 返回列與列之間的相關(guān)系數(shù)

          df.count() # 返回每一列中的非空值的個(gè)數(shù)

          df.max() # 返回每一列的最大值

          df.min() # 返回每一列的最小值

          df.median() # 返回每一列的中位數(shù)

          df.std() # 返回每一列的標(biāo)準(zhǔn)差

          df.var() # 方差

          s.mode() # 眾數(shù)



          13、繪圖


          Pandas利用plot()調(diào)用Matplotlib快速繪制出數(shù)據(jù)可視化圖形。注意,第一次使用plot()時(shí)可能需要執(zhí)行兩次才能顯示圖形。如圖8所示,可以使用plot()快速繪制折線圖。

          df['Q1'].plot() # Q1成績的折線分布


          圖8 利用plot()快速繪制折線圖


          如圖9所示,可以先選擇要展示的數(shù)據(jù),再繪圖。


          df.loc['Ben','Q1':'Q4'].plot() # ben四個(gè)季度的成績變化


          圖9 選擇部分?jǐn)?shù)據(jù)繪制折線圖


          如圖10所示,可以使用plot.bar繪制柱狀圖。


          df.loc[ 'Ben','Q1':'Q4'].plot.bar() # 柱狀圖

          df.loc[ 'Ben','Q1':'Q4'].plot.barh() # 橫向柱狀圖


          圖10 利用plot.bar繪制的柱狀圖


          如果想繪制橫向柱狀圖,可以將bar更換為barh,如圖11所示。

          圖11 利用barh繪制的橫向柱狀圖



          對(duì)數(shù)據(jù)聚合計(jì)算后,可以繪制成多條折線圖,如圖12所示。


          # 各Team四個(gè)季度總成績趨勢

          df.groupby('team').sum().T.plot()


          圖12 多條折線圖


          也可以用pie繪制餅圖,如圖13所示。


          # 各組人數(shù)對(duì)比

          df.groupby('team').count().Q1.plot.pie()


          圖13 餅圖的繪制效果



          14、導(dǎo)出


          可以非常輕松地導(dǎo)出Excel和CSV文件。


          df.to_excel('team-done.xlsx'# 導(dǎo)出 Excel文件

          df.to_csv('team-done.csv'# 導(dǎo)出 CSV文件


          導(dǎo)出的文件位于notebook文件的同一目錄下,打開看看。


          本文我們了解了編程語言Python的特點(diǎn),為什么要學(xué)Python,Pandas庫的功能,快速感受了一下Pandas強(qiáng)大的數(shù)據(jù)處理和數(shù)據(jù)分析能力。這些是我們進(jìn)入數(shù)據(jù)科學(xué)領(lǐng)域的基礎(chǔ)。


          本文摘編于《深入淺出Pandas:利用Python進(jìn)行數(shù)據(jù)處理與分析》,經(jīng)出版方授權(quán)發(fā)布。

          作者:李慶輝 
          數(shù)據(jù)產(chǎn)品專家,某電商公司數(shù)據(jù)產(chǎn)品團(tuán)隊(duì)負(fù)責(zé)人,擅長通過數(shù)據(jù)治理、數(shù)據(jù)分析、數(shù)據(jù)化運(yùn)營提升公司的數(shù)據(jù)應(yīng)用水平。

          瀏覽 52
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  91麻豆天美成人电影 | 九色视频网| 爆操嫩逼| 无码成人片 | 青娱乐少妇在线免费视频 |