python中agg函數,python中agg函數的參數

python中range()函數用法

函數語法

成都創新互聯公司專注于旌陽網站建設服務及定制,我們擁有豐富的企業做網站經驗。 熱誠為您提供旌陽營銷型網站建設,旌陽網站制作、旌陽網頁設計、旌陽網站官網定制、重慶小程序開發服務,打造旌陽網絡公司原創品牌,更為您提供旌陽網站排名全網營銷落地服務。

range(start, stop, step)

參數說明:

start: 計數從 start 開始。默認是從 0 開始。例如range(5) 等價于range(0, 5);

stop: 計數到 stop 結束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4],沒有5

step:步長,默認為1。例如:range(0, 5)等價于 range(0, 5, 1)

注:左閉右開 [start, stop)

簡例:

for i in range(5):

print(i, end=' ')

0 1 2 3 4

for i in range(0, 5):

print(i, end=' ')

0 1 2 3 4

for i in range(0,5,1):

print(i, end=' ')

0 1 2 3 4

for i in range(0,5,2):

print(i, end=' ')

0 2 4

for i in range(6,0,-1):

print(i, end=' ')

6 5 4 3 2 1

for i in range(6,0,-2):

print(i, end=' ')

6 4 2

利用 Python 分析 MovieLens 1M 數據集

MovieLens數據集是一個關于電影評分的數據集,里面包含了從IMDB, The Movie DataBase上面得到的用戶對電影的評分信息,詳細請看下面的介紹。

文件里面的內容是幫助你如何通過網站id在對應網站上找到對應的電影鏈接的。

movieId, imdbId, tmdbId

表示這部電影在movielens上的id,可以通過鏈接 來得到。

表示這部電影在imdb上的id,可以通過鏈接

來得到。

movieId, title, genres

文件里包含了一部電影的id和標題,以及該電影的類別

movieId, title, genres

每部電影的id

電影的標題

電影的類別(詳細分類見readme.txt)

文件里面的內容包含了每一個用戶對于每一部電影的評分。

數據排序的順序按照userId,movieId排列的。

文件里面的內容包含了每一個用戶對于每一個電影的分類

數據排序的順序按照userId,movieId排列的。

=======

該數據集(ml-latest-small)描述了電影推薦服務[MovieLens]( )的5星評級和自由文本標記活動。它包含9742部電影的100836個評級和3683個標簽應用程序。這些數據由610位用戶在1996年3月29日到2018年9月24日之間創建。該數據集于2018年9月26日生成。

隨機選擇用戶以包含在內。所有選定的用戶評分至少20部電影。不包括人口統計信息。每個用戶都由一個id表示,并且不提供其他信息。

數據包含在 links.csv , movies.csv , ratings.csv 和 tags.csv 文件中。有關所有這些文件的內容和用法的更多詳細信息如下。

這是一個發展的數據集。因此,它可能會隨著時間的推移而發生變化,并不是共享研究結果的適當數據集。

========

要確認在出版物中使用數據集,請引用以下文件:

========================

數據集文件以[逗號分隔值]文件寫入,并帶有單個標題行。包含逗號( , )的列使用雙引號(```)進行轉義。這些文件編碼為UTF-8。如果電影標題或標簽值中的重音字符(例如Misérables,Les(1995))顯示不正確,確保讀取數據的任何程序(如文本編輯器,終端或腳本)都配置為UTF-8。

MovieLens用戶隨機選擇包含。他們的ID已經匿名化了。用戶ID在 ratings.csv 和 tags.csv 之間是一致的(即,相同的id指的是兩個文件中的同一用戶)。

數據集中僅包含至少具有一個評級或標記的電影。這些電影ID與MovieLens網站上使用的電影ID一致(例如,id 1 對應于URL )。電影ID在 ratings.csv , tags.csv , movies.csv 和 links.csv 之間是一致的.

通過[pandas.read_csv]將各表轉化為pandas 的DataFrame對象

其中用到的參數為分隔符sep、頭文件header、列名定義names、解析器引擎engine

這里和書上相比多用了engine參數,engine參數有C和Python,C引擎速度更快,而Python引擎目前功能更完整。

可用pandas.merge 將所有數據都合并到一個表中。merge有四種連接方式(默認為inner),分別為

通過索引器查看第一行數據,使用基于標簽的索引.loc或基于位置的索引.iloc

可通過數據透視表( pivot_table )實現

該操作產生了另一個DataFrame,輸出內容為rating列的數據,行標index為電影名稱,列標為性別,aggfunc參數為函數或函數列表(默認為numpy.mean),其中“columns”提供了一種額外的方法來分割數據。

by參數的作用是針對特定的列進行排序(不能對行使用),ascending的作用是確定排序方式,默認為升序

增加一列存放平均得分之差,并對其排序,得到分歧最大且女性觀眾更喜歡的電影

按照電影標題將數據集分為不同的groups,并且用size( )函數得到每部電影的個數(即每部電影被評論的次數),按照從大到小排序,取最大的前20部電影列出如下

按照電影名稱分組,用agg函數通過一個字典{‘rating’: [np.size, np.mean]}來按照key即rating這一列聚合,查看每一部電影被評論過的次數和被打的平均分。取出至少被評論過100次的電影按照平均評分從大到小排序,取最大的10部電影。

python中range()函數的用法

python中range()函數的用法:

(1)range(stop)

創建一個(0,stop)之間的整數序列,步長為1。

(2)range(start,stop)

創建一個(start,stop)之間的整數序列,步長為1。

(3)range(start,stop,step)

創建一個[start,stop)之間的整數序列,步長為step。

參數介紹:

start:表示從返回序列的起始編號,默認情況下從0開始。

stop:表示生成最多但不包括此數字的數字。

step:指的是序列中每個數字之間的差異,默認值為1。

相關介紹

range()是Python的內置函數,在用戶需要執行特定次數的操作時使用它,表示循環的意思。內置函數range()可用于以列表的形式生成數字序列。在range()函數中最常見用法是使用for和while循環迭代序列類型(List,string等)。

簡單的來說,range()函數允許用戶在給定范圍內生成一系列數字。根據用戶傳遞給函數的參數數量,用戶可以決定該系列數字的開始和結束位置以及一個數字與下一個數字之間的差異有多大。

pandas常用函數匯總

pandas官方文檔:

對常用函數做了匯總,每個函數的參數可能不是全的,但是常用的,不常用的沒總結,如有問題,請不吝賜教,謝謝!

1、創建Series

? 通用函數:pd.Series(values,index)

1)pd.Series([1,2,3],index=[‘a’,‘b’,‘c‘])

2)pd.Series(np.array([1,2,3]),index=[‘a’,‘b’,‘c‘])

3)pd.Series({ 'a':1,? 'b':2,? 'c':3})

? ? Series轉字典:Series.to_dict()

說明:Series的values參數是python中常見的一維數據類型。

2、屬性

1)Series.values ---array([1,2,3])

? ? ?? Series的values是array類型

2)Series.index---index([‘a’,‘b’,‘c‘])

? ? ?? 未指定index時,自動生成 0-(N-1)的整數索引,

? ? ?? 指定 index時,使用指定索引。

3、Series的索引與切片

?? Series[0] / Series['a']? : Sereis可以位置索引或標簽索引,也可以進行切片操作

1、創建DataFrame

1) 創建DataFrame的通用函數:

df = pd.DataFrame(values,index,columns)

pd.dataFrame([[1,2,3],[4,5,6],[7,8,9]],index=['a','b','c'],columns=['bj','sh','sz'])

pd.dataFrame(np.arange(1,10).reshape(3,3),index=['a','b','c'],columns=['bj','sh','sz'])

pd.dataFrame('bj':[1,4,7],'sh':[2,5,8],'sz':[3,6,9],index=['a','b','c'])

說明:創建方法與Sries類似,Series的values參數是python中常見的一維數據類型,DataFrame的values參數是python中常見的二維數據類型。

2) 通過網頁中復制數據快捷創建

? ? import webbrowser

? ? link = ''

? ? webbrowser.open(link)

? ? 打開界面進行復制,將數據復制到粘貼板中

? ? df = pd.read_clipboard() ? #從粘貼板中讀取數據

3)通過Series創建DataFrame

? ? df = pd.DataFrame([s1,s2,s3],columns=['bj','sh','sz'])

? ? 注意:單獨的s1,s2,s3是縱向排列的的Series,但是在DataFrame中是橫向排列的。

? ? 自己總結:Series除了打印出來是Series格式外,其他時候可以直接當作list來操作。

2、屬性

1)df.columns

? ? 通過columns生成新的DataFrame

? ? df_new = pd.DataFrame(df,columns=['x1','x2'])

? ? 或者df_new = df[['x1','x2']]

2)df.shape? 顯示行列數

3)df.head() ? 默認顯示前5行

4)df.tail() ? ? 默認顯示后5行

3、獲取DataFrame的列

1)獲取DataFrame某一列

? ? ? df.x1或df['x1']:返回值是Series,可以理解為一個DataFrame是由多個Series組成的。

? 2) 獲取DataFrame某幾列

? ? ? df_new = df[['x1','x2','x3']]

4、為某列賦值

? 1) df['x1'] = range(10)

? 2) df['x1'] = numpy.arange(10)

? 3) df['x1'] = pd.Series(np.arange(10))

? 說明:類似于創建Series

5、為某列對應的特定行重新賦值

? ? df['x1'] = pd.Series([2,3],index=[0,1])

? ? 將列為x1,行索引為0和1的值改為2,3

6、獲取DadaFrame的行

? for row in DataFrame.iterrows():

? ? ? ? ? print(row[0],row[1])

? #每個row是一個元祖,包含2個元素,row[0]是整型索引,row[1]是Series,所以從行的角度也可以看出,一個DataFrame是由多個Series組成的。

7、DataFrame的轉置

? df_new = df.T

1、粘貼板的io

? df = pd.read_clipboard()

? df.to_clipboard()

2、csv的io

?? df.to_csv('xxx.csv')

?? df = pd.read_csv('xxx.csv')

3、json的io

?? df.to_json()

?? pd.read_json(df.to_json())

4、excel的io

? ? df.to_excel('xx.xlsx')

? ? df = pd.read_excel('xx.xlsx')

5、df = pd.read_sql('')

? ? df.to_sql('')

1、iloc

? sub_df = df.iloc[10:20,:]? 選取DataFrame的10-20行,所有列數據

? sub_df = df.iloc[10:20,0:2]

? 說明:iloc函數是位置索引,與索引的名字無關。

2、loc

? sub_df = df.loc[10:20,:'movie_name']

? 說明:loc是標簽索引,10,20,'movie_name'? 都是索引名字,與位置無關。

1、Series.reindex(index=['x1','x2','x3'],fill_value=10)

? 將df重新索引,并且將NaN空值用10進行填充

2、Series.reindex(index=range(15),method='ffill')

前項填充,后面的值用前面的值進行填充

通過reindex想到,如果想新增一個空列或者空行,可以用reindex方法,同樣地,想減少某些行或者某些列,也可以用reindex方法。

? 繼reindex之后刪除行列的函數操作

? Series.drop('A') ? #刪除'A'所對應的值

? DataFrame.drop(label,axis)?

? label可以是行名也可以是列名,label是行的話axis是0,label是列的話axis是1。

** 刪除行還可以用 del df['A']

nan是numpy的一種數據類型,np.nan,float類型

任何數據與nan的運算結果都是nan

1、nan in Series

? Series.isnull()? --返回value為True或者False的Series

? Series.notnull()? --返回value為True或者False的Series

? Series.dropna()? --返回刪除nan值后的Series

? Series.fillna(method='ffill')? --前項插值,按照前面的值填充后面的空值

2、nan in DataFrame

? df.isnull()? --返回value為True或者False的DataFrame

? df.notnull()? --返回value為True或者False的DataFrame

? df.dropna(axis=0/1,how='any/all',thresh=None)

? 說明:axis表示刪除行為nan或者列為nan;

? ? ? ? ? ? any表示只要有一個為空,all表示行中的每個元素或者列中的每個元素為空;

? ? ? ? ? ? thresh是閾值的意思,表示某行或者某列nan的個數達到閾值的個數時才刪除該行或該列。

? df.fillna(value=1)? ---所有的空值都填充為1

? df.fillna(value={0:0,1:1,2:2}) ---將0列的空值填為0,1列的空值填為1,2列的空值填為2,默認為填充列

? 注意:fillna和dropna的特點,生成新的DataFrame,原來的DataFrame不變。

1、多重索引介紹

Series = pd.Series(np.random.randn(6),index=[['1','1','1','2','2','2'],['a','b','c','a','b','c']])

'1','2'為一級索引,'a','b','c'為二級索引

df 可以看做是索引的'1','2'的Series

Series['1']? --Series

Series['1']['a']? --value

Series[:,'a'] --選擇'1'和'2'中的'a'對應的值

2、多重索引格式轉為二維DataFrame

df = Series.unstack() --轉為二維DataFrame

3、多重索引在DataFrame中的操作

1、 map函數與apply函數、applymap函數的區別:

? 1)map函數對Series中的每個元素作用;

? 2)applymap函數對DataFrame中的每個元素作用;

? 3)apply函數對對DataFrame和Series的一列做整體運算。

2、Series.replace(to_replace=[2,3,4],values=[20,30,40])? 替換Series中多個值

Series.replace({1:10,2:20})? 將索引為1的值替換為10,將索引為2的值替換為20

df.sum()? --默認按照列進行求和,nan的值被忽略

df.min()? --默認按照列求最小值

df.max()? --默認按照列求最大值

df.mean()? --默認按照列求平均值

df.describe()? --默認按照列進行描述

df.sum(axis=1)? --按行求和,nan的值被忽略

#axis=0表示對橫軸進行操作,但是運算中表現為縱軸操作

#axis=1表示對縱軸進行操作,但是運算中表現為橫軸操作

bins = [0,59,70,80,100],bins是分割范圍

score_cat = pd.cut(Series,bins)? ---得到catgory類型的數據

DataFrame的分箱技術很棒啊!

pd['catgory'] = pd.cut(df['a'],bins=[0,59,70,80,100],labels=['low','ok','good','great'])

--新增一列,將a列的值按照labels進行分類標記,good!!!

#生成長度為3的隨機字符串? pd.util.testing.rands(3)

1、按照一列分組

? g = df.groupby('city')

? g是分組類型數據,打印不出來,所以看不到,但是有屬性和方法可以間接的了解

1) g.groups? --得到分的幾個組,和每個組包含的索引

2)g.get_group('BJ')? --得到'BJ'所對應的組

3)groupby = split +apply +combine

? ? ?? g.mean()? --求每組的平均值

? ? ?? g.max() ? --求每組的最大值

? ? ?? g.min() ? --求每組的最小值

? ? ?? g.count()

? ? ?? g.describe()

? 4)g是一個可迭代對象,可以用list函數將其轉化為list

? ? ? list(g) -- [('組名1',DataFrame1),('組名2',DataFrame2),(),()]

? ? ? dict(list(g))? --將其轉化為字典

? 同時可以通過for循環進行遍歷操作:for item,desc in g:print(item,desc)

? #怪不得分組后不是DataFrame,因為元組的第一個元素是'分組名'。

2、按照多列分組

? g_new = df.groupby(['city','wind'])

? 得到生成器((('分組1','分組2'),DataFrame),(),()...)

? g_new.get_group(('分組1','分組2'))

? for (name_1,name_2),group in g_new:

? ? ? ? ? print((name_1,name_2),group)

g.mean()? --求每組的平均值

與g.agg('mean')方法一樣

pd.pivot_table(df,index=['',''],aggfuc='sum',values=['',''])

index是分組的組名,values是透視表呈現結果的列,columns是values下的分解

#感覺透視表呈現的結果就是groupby+agg后的結果

#分析者需要對數據結構有一定的了解

df.sort_values(by='',ascending=True/False)[:10]? df可以索引

df.value_counts()? --按值計數

df.['a'] = df['b'].apply(lambda x:x0)? --DataFrame中的True/False

通過g.size()可以看到被groupby之后的數據,得到的是一個Series

1、Series的排序:

1)對值進行排序

Series.sort_values()? ---直接對Series的值進行排序

2)通過索引進行排序

Series.sort_index()?

#默認都是升序排列

2、DataFrame的排序

df.sort_values(by='')? --按照某列的順序進行排序

df['a'].sort_values()? --返回對a列數據的排序結果,只返回a列

1、df.index = Series(['a','b','c'])? 直接對index賦予新值

2、df.index = df.index.map(str.upper)

map函數中只傳入新的函數名即可

3、df.rename(index=str.upper,columns=str.lower)

? 或者傳遞字典,進行一一轉換

pd.merge(df1,df2,on=None,how='left/right/inner/outer')

pd.merge(df1,df2)? --沒有on參數默認先找相同的columns,然后在columns下找相同的values

pd.merge(df1,df2,on='columns')? --on參數是指按照指定列進行merge

left:表示以左邊的數據表為基準,進行填充右面的數據

right:表示以右邊的數據表為基準,填充左邊的數據

outer:以on的指定列的所有值為基準,填充兩邊的數據

inner:默認inner,相同on指定的columns下的相同values對應的左右兩邊的數據

1、concat拼接

pd.concat([Series1,Series2])

pd.concat([df1,df2])? -- 上下疊加,將沒有的列進行填充

2、combine組合

Series1.combine_first(Series2)? --用Series2的值去填充Series1中為空的值

df1.combine_first(df2)? ---用df2將df1中的空值填充

df['A'] = df['A'].apply(str.upper)? ---apply函數中也只輸入函數名

len(df)? --求df的長度

len(df['a'].unique())? --查看a列中不重復數據的多少

Series.duplicated()? --返回一列True/False的Series

Series.drop_duplicates()? --刪除重復值

df.drop_duplicates('a',keep='first/last')

df.drop_duplicates()? --刪除完全重復的行

參數:'a'表示以a列為基準,刪除重復值

? ? ? ? ? first表示保留第一個,last表示保留最后一個

data_list = pd.date_range(start,end,period='D',freq)

period='D',以天為單位

freq = 'W' 以周為單位

freq = 'W-Mon'以每周一位單位

freq = '5H'? 以5h為單位

以data_range作為索引提取數據比較簡單

df[datetime(2017,9,1)]

df['2017-09-01']

df['20170901']

df['201709']

對時間序列數據進行分組聚合操作:

s1.resample('M').mean()? --以月為單位進行采樣,然后求每組的平均值

s1.resample('H').ffill()? --前項填充

s1.resample('H').bfill()? --后項填充

補充:1)jupyter中可以執行linux命令,太棒了!

? ? ? ? ? ? !ls

? ? ? ? ? ? !more xxx.csv

? ? ? ? ? ? !pwd? 等等

? ? ?? 2)jupyter 查看函數幫助的快捷鍵:摁住shift + tab? 棒!!!

Python中range()函數的用法

此刻的心情:

2018年五一后入職新公司做項目實施,一直忙碌著公司的項目;國慶后更是被調到東莞支援項目,工作時間真的成了996了,唯一休息的一天也懶的出去。看看電影、洗洗衣服、與小棉襖視頻下、學習學習Python也還挺有趣,也很充實。

Python中range()函數的用法

1、函數原型:range(start, end, scan):

參數含義:

start:計數從start開始。默認是從0開始。

例如range(5)等價于range(0, 5); end:技術到end結束,但不包括end.

例如:range(0, 5) 是[0, 1, 2, 3, 4]沒有5 scan:每次跳躍的間距,默認為1。

例如:range(0, 5) 等價于 range(0, 5, 1)

2、python中的range()函數的功能很強大,所以我覺得很有必要和大家分享一下,就好像其API中所描述的:

If you do need to iterate over a sequence of numbers, the built-in function range() comes in handy. It generates arithmetic progressions

--有道翻譯的結果:如果確實需要迭代一組數字,那么內置函數range()就派上用場了。它生成算術級數。

3、實例調用?

#r如果你需要遍歷一個數字序列,可以使用內置函數range()

#1、下面遍歷一個列表

the_count=[1,2,3,4,5,6]

for number in the_count:

print("this is count %d" % number)

print("--------------------")

#2、遍歷一個混合列表

list=[1,2,3,4,"zll",5,6,"hello",7,8.9]

for i in range(len(list)):

print (list[i],end="、")

print("\n--------------------")

#3、用range()函數生成一個列表

for i in range(5):

print(i,end="、")

print("\n--------------------")

#4、range(10),其中參數10代表:從0到10的一個序列,當然不包含10

print("range(10)表示:" ,range(10))

listA=[i for i in range(10)] print(listA)

print("--------------------")

#5、我們也可以自定義起始點和結束點 #我們定義了一個從5開始的起始點,到100結束的結束點

print("range(5,100)表示",range(5,100))

listB=[i for i in range(5,100)]

print(listB) print("--------------------")

#6、定義了這些后,我們還可以定義步長 #我們定義一個從1開始到30結束,步長為3的列表

print('range(1,30,3)表示:',range(1,30,3))

listC = [i for i in range(1,30,3)]

print(listC)

4、自己運行試試結果哦...

Python分組

前言分組原理

核心:

1.不論分組鍵是數組、列表、字典、Series、函數,只要其與待分組變量的軸長度一致都可以傳入groupby進行分組。

2.默認axis=0按行分組,可指定axis=1對列分組。

對數據進行分組操作的過程可以概括為:split-apply-combine三步:

1.按照鍵值(key)或者分組變量將數據分組。

2.對于每組應用我們的函數,這一步非常靈活,可以是python自帶函數,可以是我們自己編寫的函數。

3.將函數計算后的結果聚合。

1 分組模式及其對象

1.1 分組的一般模式

三個要素:分組依據、數據來源、操作及其返回結果

df.groupby(分組依據)[數據來源].使用操作

1.2 分組依據的本質

1.3Groupby 對象

通過 ngroups 屬性,可以訪問分為了多少組:

通過 groups 屬性,可以返回從 組名映射到 組索引列表的字典:

當 size 作為 DataFrame 的屬性時,返回的是表長乘以表寬的大小,但在 groupby 對象上表示統計每個組的 元素個數:

通過 get_group 方法可以直接獲取所在組對應的行,此時必須知道組的具體名字:

1.4 分組的三大操作

分組的三大操作:聚合、變換和過濾

2.聚合函數

2.1內置聚合函數

包括如下函數: max/min/mean/median/count/all/any/idxmax/idxmin/mad/nunique/skew/quantile/sum/std/var/sem/size/prod

2.2agg 方法

【a】使用多個函數

當使用多個聚合函數時,需要用列表的形式把內置聚合函數的對應的字符串傳入,先前提到的所有字符串都是合法的。

【b】對特定的列使用特定的聚合函數

對于方法和列的特殊對應,可以通過構造字典傳入 agg 中實現,其中字典以列名為鍵,以聚合字符串或字符串列表為值。

【c】使用自定義函數

在 agg 中可以使用具體的自定義函數,需要注意傳入函數的參數是之前數據源中的列,逐列進行計算

【d】聚合結果重命名 如果想要對結果進行重命名,只需要將上述函數的位置改寫成元組,元組的第一個元素為新的名字,第二個位置為原來的函數,包括聚合字符串和自定義函數

3 變換和過濾

3.1 變換函數與 transform 方法

變 換 函 數 的 返 回 值 為 同 長 度 的 序 列, 最 常 用 的 內 置 變 換 函 數 是 累 計 函 數:cum- count/cumsum/cumprod/cummax/cummin ,它們的使用方式和聚合函數類似,只不過完成的是組內 累計操作。

3.2 組索引與過濾

過濾在分組中是對于組的過濾,而索引是對于行的過濾

組過濾作為行過濾的推廣,指的是如果對一個組的全體所在行進行統計的結果返回 True 則會被保留,False 則該組會被過濾,最后把所有未被過濾的組其對應的所在行拼接起來作為 DataFrame 返回。

在 groupby 對象中,定義了 filter 方法進行組的篩選,其中自定義函數的輸入參數為數據源構成的 DataFrame 本身,在之前例子中定義的 groupby 對象中,傳入的就是 df[['Height', 'Weight']] ,因此所有表方法和屬性 都可以在自定義函數中相應地使用,同時只需保證自定義函數的返回為布爾值即可。

4 跨列分組

4.1 apply 的引入

4.2 apply 的使用

在設計上,apply 的自定義函數傳入參數與 filter 完全一致,只不過后者只允許返回布爾值

【a】標量情況:結果得到的是 Series ,索引與 agg 的結果一致

【b】Series 情況:得到的是 DataFrame ,行索引與標量情況一致,列索引為 Series 的索引

【c】DataFrame 情況:得到的是 DataFrame ,行索引最內層在每個組原先 agg 的結果索引上,再加一層返 回的 DataFrame 行索引,同時分組結果 DataFrame 的列索引和返回的 DataFrame 列索引一致

當前題目:python中agg函數,python中agg函數的參數
網頁鏈接:http://m.kartarina.com/article0/hdpjio.html

成都網站建設公司_創新互聯,為您提供網站建設小程序開發ChatGPT服務器托管外貿建站搜索引擎優化

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

商城網站建設
主站蜘蛛池模板: 日韩少妇无码一区二区三区| 精品无码一区二区三区在线| 人妻老妇乱子伦精品无码专区| 国产激情无码一区二区三区| 亚洲日韩激情无码一区| 无码国内精品人妻少妇蜜桃视频| 成人麻豆日韩在无码视频| 亚洲AV永久无码区成人网站| 国产久热精品无码激情| 亚洲日韩VA无码中文字幕| 亚洲AV无码一区二区一二区| 久久精品aⅴ无码中文字字幕| 亚洲AV无码一区二区大桥未久 | 东京热无码av一区二区| 无码人妻精品一区二区三区久久| 全免费a级毛片免费看无码| 无码AV天堂一区二区三区| 久久久久久国产精品无码下载| 久久久久精品国产亚洲AV无码| 在线播放无码高潮的视频| 国产成人无码aa精品一区| 亚洲日韩国产AV无码无码精品| 亚洲av永久无码精品网站| 超清无码一区二区三区| 精品一区二区无码AV | 精品少妇人妻AV无码专区不卡 | 久久久久无码精品国产app| 久久av无码专区亚洲av桃花岛| 国产AV无码专区亚洲AV毛网站| 亚洲av无码不卡私人影院| 国产精品无码素人福利免费| 无码免费午夜福利片在线| 亚洲6080yy久久无码产自国产| 99精品人妻无码专区在线视频区| 日韩人妻无码一区二区三区99| 无码久久精品国产亚洲Av影片 | 最新无码人妻在线不卡| 无码精品国产dvd在线观看9久 | 亚洲av无码一区二区三区网站| 国产成人A亚洲精V品无码| 亚洲国产精品无码久久一线|