日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据分析 第七讲 pandas练习 数据的合并、分组聚合、时间序列、pandas绘图

發布時間:2023/12/15 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据分析 第七讲 pandas练习 数据的合并、分组聚合、时间序列、pandas绘图 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 數據分析 第七講 pandas練習 數據的合并和分組聚合
    • 一、pandas-DataFrame
      • 練習1
        • 對于這一組電影數據,如果我們想runtime(電影時長)的分布情況,應該如何呈現數據?
      • 練習2
        • 全球食品數據分析
    • 二、數據的合并和分組聚合
      • 1.字符串離散化
      • 2.數據合并
      • 3.數據的分組聚合
      • 4.索引和復合索引
        • Series復合索引
        • DateFrame復合索引
      • 5.練習
        • 1.使用matplotlib呈現出店鋪總數排名前10的國家
        • 2.使用matplotlib呈現出中國每個城市的店鋪數量
    • 三、pandas中的時間序列
      • 1.時間范圍
      • 2.DataFrame中使用時間序列
      • 3.pandas重采樣
      • 4.練習
        • 練習1:統計出911數據中不同月份的電話次數
        • 練習2現在我們有北上廣、深圳、和沈陽5個城市空氣質量數據,請繪制出5個城市的PM2.5隨時間的變化情況
    • 四、pandas畫圖
      • 1.折線圖
      • 2.分組柱狀圖
      • 2.餅圖

數據分析 第七講 pandas練習 數據的合并和分組聚合

一、pandas-DataFrame

練習1

對于這一組電影數據,如果我們想runtime(電影時長)的分布情況,應該如何呈現數據?

數據分析

# 對于這一組電影數據,如果我們想runtime(電影時長)的分布情況,應該如何呈現數據?import pandas as pd from matplotlib import pyplot as plt import matplotlib font = { 'family':'SimHei', 'weight':'bold', 'size':12 } matplotlib.rc("font", **font) file_path = './IMDB-Movie-Data.csv' df = pd.read_csv(file_path) # print(df.info()) ''' <class 'pandas.core.frame.DataFrame'> RangeIndex: 1000 entries, 0 to 999 Data columns (total 12 columns):# Column Non-Null Count Dtype --- ------ -------------- ----- 0 Rank 1000 non-null int64 1 Title 1000 non-null object 2 Genre 1000 non-null object 3 Description 1000 non-null object 4 Director 1000 non-null object 5 Actors 1000 non-null object 6 Year 1000 non-null int64 7 Runtime (Minutes) 1000 non-null int64 8 Rating 1000 non-null float649 Votes 1000 non-null int64 10 Revenue (Millions) 872 non-null float6411 Metascore 936 non-null float64 dtypes: float64(3), int64(4), object(5) memory usage: 93.9+ KB None ''' # print(df.head(3)) # runtime_data = df.loc[:,'Runtime (Minutes)'] # 也可以直接取runtime_data = df['Runtime (Minutes)'] # print(type(runtime_data)) # <class 'pandas.core.series.Series'> runtime_data = df['Runtime (Minutes)'] print(type(runtime_data)) # <class 'pandas.core.series.Series'> print(max(runtime_data)) # 191 print(min(runtime_data)) # 66 # print(runtime_data) ''' 0 121 1 124 2 117 3 108 4 123... 995 111 996 94 997 98 998 93 999 87 Name: Runtime (Minutes), Length: 1000, dtype: int64 ''' runtime_data = df['Runtime (Minutes)'].values # 變成列表的形式 print(type(runtime_data)) # <class 'numpy.ndarray'> print(max(runtime_data)) # 191 print(min(runtime_data)) # 66 # print(runtime_data) ''' [121 124 117 108 123 103 128 89 141 116 133 127 133 107 109 87 139 123118 116 120 137 108 92 120 83 159 99 100 115 111 116 144 108 107 147169 115 132 113 89 111 73 115 99 136 132 91 122 130 136 91 118 101152 161 88 106 117 96 151 86 112 125 130 129 133 120 106 107 133 124108 97 108 169 143 153 151 116 148 118 180 149 137 124 129 162 187 128153 123 146 114 141 116 106 90 105 151 132 115 144 106 116 102 120 110105 108 89 134 118 117 130 105 118 161 104 97 127 139 98 86 164 106165 96 108 156 139 125 86 107 130 140 122 143 138 148 127 94 130 118165 144 104 162 113 121 117 142 88 121 91 94 131 118 112 121 106 90132 118 144 122 129 109 144 148 118 101 84 126 102 130 130 107 134 117118 92 105 112 124 135 113 119 100 125 133 94 128 92 140 124 95 148114 107 113 146 134 126 120 132 99 118 125 111 114 94 144 104 112 126136 104 100 117 96 117 100 158 110 163 119 107 97 102 118 95 139 131114 102 100 85 99 125 134 95 90 126 118 158 109 119 119 112 92 94147 142 112 100 131 105 81 118 119 108 108 117 112 99 102 172 107 85143 169 110 106 89 124 112 157 117 130 115 128 113 119 98 110 105 12795 99 118 112 92 107 143 111 94 109 127 158 132 121 95 97 104 148113 110 104 110 129 180 93 144 138 126 112 81 94 131 104 84 114 109120 106 110 103 95 133 87 133 117 150 123 97 122 88 126 117 107 119131 102 139 110 127 138 102 94 89 124 119 96 119 102 118 123 107 12398 100 132 88 106 120 115 117 136 123 89 113 113 110 111 99 123 13397 126 86 124 81 142 100 121 105 140 126 132 100 115 122 98 101 112112 113 85 110 91 91 92 95 118 100 157 100 137 99 93 115 104 13098 102 108 123 146 101 111 88 108 102 99 166 102 115 104 109 170 102116 132 102 97 123 114 103 88 130 117 100 112 81 125 95 101 102 100124 101 108 119 109 115 108 100 117 119 125 97 109 97 103 129 100 91112 107 157 123 158 153 120 106 137 94 96 113 111 97 115 97 97 94117 115 105 111 98 118 85 114 108 101 106 112 109 96 131 118 109 124141 110 131 95 94 91 94 124 91 132 115 92 150 120 161 111 120 117133 112 106 103 109 100 123 135 117 92 126 89 125 132 130 108 92 108128 105 107 126 103 112 92 108 98 100 106 123 100 104 106 91 108 92122 84 103 91 110 101 127 111 154 96 98 98 109 107 121 101 117 106117 125 146 101 90 103 94 110 133 114 137 110 107 93 152 112 106 10596 116 110 83 97 95 113 88 129 95 110 95 100 98 139 120 124 162135 160 90 92 101 139 95 114 103 88 108 97 109 118 104 88 93 98112 112 120 85 98 129 93 116 83 113 117 122 119 113 85 116 101 133101 104 116 101 103 87 83 140 165 101 100 96 111 95 114 117 102 129106 115 129 143 114 137 131 114 98 126 115 102 101 140 123 112 90 130123 118 96 88 103 122 96 151 104 105 127 93 100 106 128 94 111 106111 165 98 87 106 88 141 96 150 80 95 131 116 108 104 86 138 97123 115 102 89 140 113 109 110 117 100 119 104 100 149 104 126 93 128118 112 99 111 129 110 96 116 86 127 99 106 113 104 107 103 106 11192 87 113 116 114 114 102 118 85 153 114 122 109 119 106 95 98 11096 106 102 90 90 108 113 117 120 82 95 134 108 92 89 92 118 111101 66 102 108 120 98 114 109 88 110 115 105 104 111 116 95 111 12893 100 123 112 87 129 95 94 99 73 107 123 118 119 90 88 91 108191 87 102 94 120 112 83 108 128 113 102 115 108 125 135 97 98 13894 131 108 128 123 104 116 96 92 111 115 123 107 141 113 129 81 85108 120 110 122 99 126 116 85 93 107 114 100 98 98 110 99 120 125119 96 101 143 139 101 88 100 104 134 127 145 92 105 123 117 96 89101 105 98 102 117 110 95 122 95 106 133 87 96 89 122 156 103 91147 113 97 93 102 103 154 117 110 110 86 144 113 107 97 97 120 10892 96 108 109 98 124 86 106 119 99 132 91 100 80 105 115 146 95105 94 100 109 117 110 101 101 115 108 104 180 122 123 83 150 92 105123 111 124 94 113 92 97 120 109 118 133 104 111 102 92 104 99 12892 165 97 97 88 111 94 98 93 87]''' max_runtime = max(runtime_data) min_runtime = min(runtime_data)# 直方圖 # 組數 = (最大值-最小值)/組距 (191-66)//5 = 25 num_bins = (max_runtime - min_runtime) // 5 # print(num_bins) # 25plt.figure(figsize=(15,8),dpi=80) plt.hist(runtime_data,num_bins) plt.xticks(range(min_runtime,max_runtime+5,5)) plt.title('電影時長分布圖') plt.grid() plt.show()

練習2

全球食品數據分析

步驟分析
1.數據清洗
2.獲取國家列表
3.對各個國家進行統計
4.保存統計結果

import pandas as pd# df = pd.read_csv('FoodFacts.csv') # print(df.info()) ''' sys:1: DtypeWarning: Columns (0,3,5,27,36) have mixed types.Specify dtype option on import or set low_memory=False. <class 'pandas.core.frame.DataFrame'> RangeIndex: 65503 entries, 0 to 65502 Columns: 159 entries, code to nutrition_score_uk_100g dtypes: float64(103), object(56) memory usage: 79.5+ MB None'''def get_countries(countries_data):'''獲取國家數據'''low_countries_data = countries_data.str.lower() # 改為小寫# print(low_countries_data.head(30))# 很多行包含兩個國家france,united kingdom# contains 模糊查詢 ~ 非low_countries_data = low_countries_data[~low_countries_data.str.contains(',')]countries = low_countries_data.unique() # 返回列的所有唯一值# print(countries)'''['united kingdom' 'france' 'spain' 'germany' 'united states' 'belgium''australia' 'netherlands' 'cuba' 'canada' 'switzerland' 'austria''sweden' 'united arab emirates' 'saint pierre and miquelon' 'fr:quebec''italy' 'czech republic' 'china' 'cambodia' 'réunion' 'hong kong''brazil' 'japan' 'mexico' 'lebanon' 'philippines' 'guadeloupe' 'ireland''senegal' "c?te d'ivoire" 'togo' 'poland' 'india' 'south korea' 'turkey''french guiana' 'portugal' 'south africa' 'romania' 'denmark' 'greece''luxembourg' 'new caledonia' 'russia' 'french polynesia' 'tunisia''martinique' 'mayotte' 'hungary' 'bulgaria' 'slovenia' 'finland''republique-de-chine' 'taiwan' 'lithuania' 'belarus' 'cyprus' 'irlande''albania' 'malta' 'iceland' 'polska' 'kenya' 'mauritius' 'algeria' 'iran''qatar' 'thailand' 'colombia' 'norway' 'israel' 'venezuela' 'argentina''chile' 'new zealand' 'andorra' 'serbia' 'other-turquie' 'iraq''nederland' 'singapore' 'indonesia' 'burkina faso']'''# print("一共有%s個國家"%len(countries)) # 一共有84個國家return countriesdef get_additives_count(countries, data):count_list = []for country in countries:f_data = data[data['countries_en'].str.contains(country, case=False)] # 模糊查找,不區分大小寫# print(f_data.head(10))# exit()'''countries_en additives_n5 United Kingdom 0.010 United Kingdom 5.011 United Kingdom 5.014 United Kingdom 0.017 United Kingdom 0.018 United Kingdom 0.046 France,United Kingdom 1.060 United Kingdom 0.084 United Kingdom 0.097 United Kingdom 0.0'''count = f_data['additives_n'].mean() # 計算平均值count_list.append(count)# print(count_list)'''[1.259009009009009, 1.93042170523602, 0.930323846908734, 0.7779232111692844, 2.1806083650190113, 1.8857142857142857, 0.5796847635726795, 1.5714285714285714, 1.8333333333333333, 1.847457627118644, 1.7183673469387755, 0.6185567010309279, 0.18181818181818182, 1.7142857142857142, 2.4324324324324325, 1.1724137931034482, 0.9190751445086706, 1.2666666666666666, 1.2, 0.2222222222222222, 2.0625, 1.375, 0.898876404494382, 0.8666666666666667, 1.75, 0.6, 0.8, 1.6748466257668713, 0.7142857142857143, 1.9166666666666667, 0.0, 8.0, 2.310810810810811, 2.0, 2.0, 0.3, 1.7954545454545454, 1.8299492385786802, 1.7272727272727273, 1.7692307692307692, 1.5912408759124088, 1.1111111111111112, 2.1923076923076925, 1.3333333333333333, 0.125, 2.0, 2.246153846153846, 1.5454545454545454, 0.0, 0.5384615384615384, 1.25, 0.25, 0.4166666666666667, 1.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.2857142857142857, 1.3333333333333333, 0.6666666666666666, 0.0, 1.5, 2.1666666666666665, 2.857142857142857, 0.0, 4.4, 0.6896551724137931, 0.5, 1.5714285714285714, 1.0, 0.0, 1.9090909090909092, 3.5, 2.6607142857142856, 0.2, 2.0, 0.0, 1.5, 0.0, 1.0, 2.125, 1.6666666666666667]'''# print(len(count_list)) # 84result_df = pd.DataFrame()result_df['country'] = countriesresult_df['count'] = count_listreturn result_dfdef main():'''主函數'''# 讀取數據df1 = pd.read_csv('FoodFacts.csv', usecols=['countries_en', 'additives_n'])# print(df1.info())'''<class 'pandas.core.frame.DataFrame'>RangeIndex: 65503 entries, 0 to 65502Data columns (total 2 columns):# Column Non-Null Count Dtype --- ------ -------------- ----- 0 countries_en 65292 non-null object 1 additives_n 43664 non-null float64dtypes: float64(1), object(1)memory usage: 1023.6+ KBNone'''# 數據清洗 刪除缺失數據data = df1.dropna()# print(data.info())'''<class 'pandas.core.frame.DataFrame'>Int64Index: 43616 entries, 5 to 65501Data columns (total 2 columns):# Column Non-Null Count Dtype --- ------ -------------- ----- 0 countries_en 43616 non-null object 1 additives_n 43616 non-null float64dtypes: float64(1), object(1)memory usage: 1022.2+ KBNone'''# print(data.head())''' countries_en additives_n5 United Kingdom 0.06 France 0.08 France 0.010 United Kingdom 5.011 United Kingdom 5.0'''countries = get_countries(data['countries_en'])# print(countries)# 獲取每個國家添加劑的數量additives = get_additives_count(countries, data)additives.to_csv('result.csv', index=False) # 保存,不加索引if __name__ == "__main__":main()

二、數據的合并和分組聚合

1.字符串離散化

  • 字符串離散化的案例
    對于這一組電影數據,如果我們希望統計電影分類(genre)的情況,應該如何處理數據?
  • 思路:重新構造一個全為0的數組,列名為分類,如果某一條數據中分類出現過,就讓0變為1

# 字符串離散化的案例 import pandas as pd import numpy as np from matplotlib import pyplot as plt import matplotlibfont = {'family': 'SimHei','weight': 'bold','size': 12 } matplotlib.rc("font", **font)pd.set_option('display.max_columns', None) pd.set_option('display.max_rows', 5) # 只看5行 pd.set_option('max_colwidth', 200)file_path = './IMDB-Movie-Data.csv'df = pd.read_csv(file_path) # print(df) # print(df.info()) # print(df.head(3)) g_list = df.loc[:, 'Genre'] # 獲取分類列 # print(g_list) ''' 0 Action,Adventure,Sci-Fi 1 Adventure,Mystery,Sci-Fi... 998 Adventure,Comedy 999 Comedy,Family,Fantasy Name: Genre, Length: 1000, dtype: object''' g_list = df["Genre"].str.split(",").tolist() # [[],...,[]] # print(g_list) # temp_list = [] # for i in g_list: # for j in i: # # print(j) # temp_list.append(j) # print(set(temp_list)) genre_list = list(set([j for i in g_list for j in i])) # 電影分類類名 # print(genre_list) '''['Action', 'Crime', 'Biography', 'Adventure', 'Thriller', 'Music', 'Romance', 'Sport', 'Family', 'Horror', 'Western', 'War', 'Animation', 'Mystery', 'Sci-Fi', 'History', 'Drama', 'Musical', 'Fantasy', 'Comedy']'''# 構造全為0的數組 zeros_data = pd.DataFrame(np.zeros((df.shape[0], len(genre_list))), columns=genre_list) # print(zeros_data) '''Action Horror Family Thriller Animation History Romance Fantasy \ 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 .. ... ... ... ... ... ... ... ... 998 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 999 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Biography Western Drama Comedy Sci-Fi Crime War Sport Mystery \ 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 .. ... ... ... ... ... ... ... ... ... 998 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 999 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Musical Music Adventure 0 0.0 0.0 0.0 1 0.0 0.0 0.0 .. ... ... ... 998 0.0 0.0 0.0 999 0.0 0.0 0.0 [1000 rows x 20 columns]'''# 給每個電影出現的位置賦值1 # print(df) # [1000 rows x 12 columns] for i in range(df.shape[0]):# zeros_data[0,[Action,Musical]] = 1zeros_data.loc[i, g_list[i]] = 1 # print(zeros_data.head(3)) '''Music Sport Mystery Adventure Musical Comedy Horror Fantasy Action \ 0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 1 0.0 0.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 2 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 Biography Family Sci-Fi War Thriller Romance Drama Crime Animation \ 0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 1 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 2 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 Western History 0 0.0 0.0 1 0.0 0.0 2 0.0 0.0 ''' genre_count = zeros_data.sum(axis=0) # 對0軸進行求和 # print(genre_count) ''' Thriller 195.0 Biography 81.0... Action 303.0 Sci-Fi 120.0 Length: 20, dtype: float64'''x = genre_count.index y = genre_count.valuesplt.figure(figsize=(15, 8), dpi=80) plt.bar(x, y) plt.xticks(range(len(x)), x, rotation=45) plt.title("電影分類圖") plt.grid() plt.show()

2.數據合并

  • join:默認情況下它是把行索引相同的數據合并到一起
  • merge:按照指定的列把數據按照一定的方式合并到一起
  • 示例1
# 數據合并 import numpy as np import pandas as pdt1 = pd.DataFrame(np.arange(12).reshape(3,4),index=list('ABC'),columns=list('DEFG')) t2 = pd.DataFrame(np.arange(10).reshape(2,5),index=list('AB'),columns=list('VWXYZ')) print(t1) '''D E F G A 0 1 2 3 B 4 5 6 7 C 8 9 10 11''' print(t2) '''V W X Y Z A 0 1 2 3 4 B 5 6 7 8 9''' print(t1 + t2) '''D E F G V W X Y Z A NaN NaN NaN NaN NaN NaN NaN NaN NaN B NaN NaN NaN NaN NaN NaN NaN NaN NaN C NaN NaN NaN NaN NaN NaN NaN NaN NaN'''print(t1.join(t2)) # join:以t1為基礎,默認情況下它是把行索引相同的數據合并到一起 '''D E F G V W X Y Z A 0 1 2 3 0.0 1.0 2.0 3.0 4.0 B 4 5 6 7 5.0 6.0 7.0 8.0 9.0 C 8 9 10 11 NaN NaN NaN NaN NaN''' print(t2.join(t1)) # join:以t2為基礎,默認情況下它是把行索引相同的數據合并到一起 '''V W X Y Z D E F G A 0 1 2 3 4 0 1 2 3 B 5 6 7 8 9 4 5 6 7''' t3 = pd.DataFrame(np.arange(12).reshape(3,4),index=list('ABC'),columns=list('DEFG')) t4 = pd.DataFrame(np.arange(10).reshape(2,5),index=list('AC'),columns=list('VWXYZ')) print(t3) '''D E F G A 0 1 2 3 B 4 5 6 7 C 8 9 10 11''' print(t4) '''V W X Y Z A 0 1 2 3 4 C 5 6 7 8 9''' print(t3.join(t4)) # join:以t3為基礎,默認情況下它是把行索引相同的數據合并到一起 '''D E F G V W X Y Z A 0 1 2 3 0.0 1.0 2.0 3.0 4.0 B 4 5 6 7 NaN NaN NaN NaN NaN C 8 9 10 11 5.0 6.0 7.0 8.0 9.0''' print(t4.join(t3)) # join:以t4為基礎,默認情況下它是把行索引相同的數據合并到一起 '''V W X Y Z D E F G A 0 1 2 3 4 0 1 2 3 C 5 6 7 8 9 8 9 10 11''' t5 = pd.DataFrame(np.arange(12).reshape(3,4),index=list('ABC'),columns=list('DEFG')) t6 = pd.DataFrame(np.arange(10).reshape(2,5),index=list('DE'),columns=list('VWXYZ')) print(t5.join(t6)) # join:以t5為基礎,沒有相同的索引,后面拼接的都為NaN '''D E F G V W X Y Z A 0 1 2 3 NaN NaN NaN NaN NaN B 4 5 6 7 NaN NaN NaN NaN NaN C 8 9 10 11 NaN NaN NaN NaN NaN''' print(t6.join(t5)) # join:以t6為基礎,沒有相同的索引,后面拼接的都為NaN '''V W X Y Z D E F G D 0 1 2 3 4 NaN NaN NaN NaN E 5 6 7 8 9 NaN NaN NaN NaN'''
  • 示例2
# 數據合并 import numpy as np import pandas as pdt1 = pd.DataFrame(np.arange(12).reshape(3, 4), index=list('ABC'), columns=list('DEFG')) t2 = pd.DataFrame(np.arange(10).reshape(2, 5), index=list('AB'), columns=list('DWXYZ')) print(t1) '''D E F G A 0 1 2 3 B 4 5 6 7 C 8 9 10 11''' print(t2) '''D W X Y Z A 0 1 2 3 4 B 5 6 7 8 9''' print(t1 + t2) '''D E F G W X Y Z A 0.0 NaN NaN NaN NaN NaN NaN NaN B 9.0 NaN NaN NaN NaN NaN NaN NaN C NaN NaN NaN NaN NaN NaN NaN NaN''' print(t1.merge(t2)) # merge:至少要有一個相同的列索引,相同的列下有相同的元素,就把該元素所在的行(去除相同的元素)合并到一行 '''D E F G W X Y Z 0 0 1 2 3 1 2 3 4''' t1.iloc[2, 0] = 5 print(t1) '''D E F G A 0 1 2 3 B 4 5 6 7 C 5 9 10 11''' print(t2) '''D W X Y Z A 0 1 2 3 4 B 5 6 7 8 9''' print(t1.merge(t2)) # 以t1為主,merge:至少要有一個相同的列索引,相同的列下有相同的元素,就把該元素所在的行(去除相同的元素)合并到一行,合并后的數據行索引從0開始 '''D E F G W X Y Z 0 0 1 2 3 1 2 3 4 1 5 9 10 11 6 7 8 9''' print(t2.merge(t1)) # 以t2為主,merge:至少要有一個相同的列索引,相同的列下有相同的元素,就把該元素所在的行(去除相同的元素)合并到一行,合并后的數據行索引從0開始 '''D W X Y Z E F G 0 0 1 2 3 4 1 2 3 1 5 6 7 8 9 9 10 11''' t1.iloc[[0, 1, 2], 0] = 1 print(t1) '''D E F G A 1 1 2 3 B 1 5 6 7 C 1 9 10 11''' print(t2) '''D W X Y Z A 0 1 2 3 4 B 5 6 7 8 9''' print(t2.merge(t1)) # 以t2為主,merge:至少要有一個相同的列索引,相同的列下沒有相同的元素,Empty DataFrame ''' Empty DataFrame Columns: [D, W, X, Y, Z, E, F, G] Index: []''' t1.iloc[[0, 1, 2], 0] = 0 print(t1) '''D E F G A 0 1 2 3 B 0 5 6 7 C 0 9 10 11''' print(t2) '''D W X Y Z A 0 1 2 3 4 B 5 6 7 8 9''' print(t2.merge(t1)) # 以t2為主,merge:至少要有一個相同的列索引,相同的列下有相同的元素,就把該元素所在的行(去除相同的元素)合并到一行,合并后的數據行索引從0開始 '''D W X Y Z E F G 0 0 1 2 3 4 1 2 3 1 0 1 2 3 4 5 6 7 2 0 1 2 3 4 9 10 11''' print(t2.merge(t1,how='left')) # 以t2為主,merge:至少要有一個相同的列索引,相同的列下有相同的元素,就把該元素所在的行(去除相同的元素)合并到一行,合并后的數據行索引從0開始 how='left'保留t2的原數據,后面用NaN填充 '''D W X Y Z E F G 0 0 1 2 3 4 1.0 2.0 3.0 1 0 1 2 3 4 5.0 6.0 7.0 2 0 1 2 3 4 9.0 10.0 11.0 3 5 6 7 8 9 NaN NaN NaN''' print(t2.merge(t1, on='D', how='outer')) '''D W X Y Z E F G 0 0 1 2 3 4 1.0 2.0 3.0 1 0 1 2 3 4 5.0 6.0 7.0 2 0 1 2 3 4 9.0 10.0 11.0 3 5 6 7 8 9 NaN NaN NaN'''t3 = pd.DataFrame(np.arange(12).reshape(3, 4), index=list('abc'), columns=list('MNOP')) t4 = pd.DataFrame(np.arange(10).reshape(2, 5), index=list('de'), columns=list('MWXYZ')) print(t3) '''M N O P a 0 1 2 3 b 4 5 6 7 c 8 9 10 11''' print(t4) '''M W X Y Z d 0 1 2 3 4 e 5 6 7 8 9 ''' print(t3.merge(t4,left_on='N',right_on='Z')) '''M_x N O P M_y W X Y Z 0 8 9 10 11 5 6 7 8 9'''

3.數據的分組聚合

df.groupby(by=“columns_name”)

dict_obj = {
‘key1’ : [‘a’, ‘b’, ‘a’, ‘b’,‘a’, ‘b’, ‘a’, ‘a’],
‘key2’ : [‘one’, ‘one’, ‘two’, ‘three’,‘two’, ‘two’, ‘one’, ‘three’],
‘data1’: np.arange(8),
‘data2’: np.arange(8)
}

# 分組聚合 import pandas as pd import numpy as npdict_obj = {'key1': ['a', 'b', 'a', 'b', 'a', 'b', 'a', 'a'],'key2': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],'data1': np.arange(8),'data2': np.arange(8) } df = pd.DataFrame(dict_obj) print(df) '''key1 key2 data1 data2 0 a one 0 0 1 b one 1 1 2 a two 2 2 3 b three 3 3 4 a two 4 4 5 b two 5 5 6 a one 6 6 7 a three 7 7 ''' # 分組 groupby df.groupby(by="key1") print(df.groupby(by="key1")) # <pandas.core.groupby.generic.DataFrameGroupBy object at 0x0000000002CB9208> for i in df.groupby(by="key1"):print(i) ''' ('a', key1 key2 data1 data2 0 a one 0 0 2 a two 2 2 4 a two 4 4 6 a one 6 6 7 a three 7 7) ('b', key1 key2 data1 data2 1 b one 1 1 3 b three 3 3 5 b two 5 5) ''' print(df.groupby(by="key1").mean()) # 求平均值,key2不是數字類型直接忽略掉 '''data1 data2 key1 a 3.8 3.8 b 3.0 3.0''' print(df.groupby(by="key1").sum()) # 求和,key2不是數字類型直接忽略掉 '''data1 data2 key1 a 19 19 b 9 9''' print(df.groupby(by="key1").count()) # 記錄個數 '''key2 data1 data2 key1 a 5 5 5 b 3 3 3'''
  • 練習
    現在我們有一組關于全球星巴克店鋪的統計數據,如果我想知道美國的星巴克數量和中國的哪個多,或者我想知道中國每個省份星巴克的數量的情況,那么應該怎么辦?
# 現在我們有一組關于全球星巴克店鋪的統計數據,如果我想知道美國的星巴克數量和 # 中國的哪個多,或者我想知道中國每個省份星巴克的數量的情況,那么應該怎么辦? # 思路:根據國家分組,統計每個國家的總數進行對比,取出中國的數據,按省份分組統計每個省份的總數進行對比 import numpy as np import pandas as pdfile_path = './starbucks_store_worldwide.csv' df = pd.read_csv(file_path) print(df.info()) ''' <class 'pandas.core.frame.DataFrame'> RangeIndex: 25600 entries, 0 to 25599 Data columns (total 13 columns):# Column Non-Null Count Dtype --- ------ -------------- ----- 0 Brand 25600 non-null object 1 Store Number 25600 non-null object 2 Store Name 25600 non-null object 3 Ownership Type 25600 non-null object 4 Street Address 25598 non-null object 5 City 25585 non-null object 6 State/Province 25600 non-null object 7 Country 25600 non-null object 8 Postcode 24078 non-null object 9 Phone Number 18739 non-null object 10 Timezone 25600 non-null object 11 Longitude 25599 non-null float6412 Latitude 25599 non-null float64 dtypes: float64(2), object(11) memory usage: 2.5+ MB None''' print(df.head()) '''Brand Store Number ... Longitude Latitude 0 Starbucks 47370-257954 ... 1.53 42.51 1 Starbucks 22331-212325 ... 55.47 25.42 2 Starbucks 47089-256771 ... 55.47 25.39 3 Starbucks 22126-218024 ... 54.38 24.48 4 Starbucks 17127-178586 ... 54.54 24.51 ''' pd.set_option('display.max_rows', 10) pd.set_option('display.max_columns', 13) print(df) '''City State/Province Country Postcode Phone Number \ 0 Andorra la Vella 7 AD AD500 376818720 1 Ajman AJ AE NaN NaN 2 Ajman AJ AE NaN NaN 3 Abu Dhabi AZ AE NaN NaN 4 Abu Dhabi AZ AE NaN NaN ... ... ... ... ... ... 25595 Thành Ph? H? Chí Minh SG VN 70000 08 3824 4668 25596 Thành Ph? H? Chí Minh SG VN 70000 08 5413 8292 25597 Johannesburg GT ZA 2194 27873500159 25598 Menlyn GT ZA 181 NaN 25599 Midrand GT ZA 1682 27873500215 Timezone Longitude Latitude 0 GMT+1:00 Europe/Andorra 1.53 42.51 1 GMT+04:00 Asia/Dubai 55.47 25.42 2 GMT+04:00 Asia/Dubai 55.47 25.39 3 GMT+04:00 Asia/Dubai 54.38 24.48 4 GMT+04:00 Asia/Dubai 54.54 24.51 ... ... ... ... 25595 GMT+000000 Asia/Saigon 106.70 10.78 25596 GMT+000000 Asia/Saigon 106.71 10.72 25597 GMT+000000 Africa/Johannesburg 28.04 -26.15 25598 GMT+000000 Africa/Johannesburg 28.28 -25.79 25599 GMT+000000 Africa/Johannesburg 28.11 -26.02 [25600 rows x 13 columns] ''' grouped = df.groupby(by='Country').count()['Brand'] print(type(grouped)) # <class 'pandas.core.series.Series'> print(grouped) ''' AD 1 AE 144 AR 108 AT 18 AU 22... TT 3 TW 394 US 13608 VN 25 ZA 3 Name: Brand, Length: 73, dtype: int64''' us_count = grouped['US'] # us_count = grouped.loc['US']也可以 print(us_count) # 13608 cn_count = grouped['CN'] # cn_count = grouped.loc['CN']也可以 print(cn_count) # 2734 print("美國的星巴克總數位%s,中國的星巴克為%s" % (us_count, cn_count)) '''美國的星巴克總數位13608,中國的星巴克為2734'''# 布爾索引 china_data = df[df['Country'] == 'CN'] print(china_data) '''Brand Store Number Store Name Ownership Type \ 2091 Starbucks 22901-225145 北京西站第一咖啡店 Company Owned 2092 Starbucks 32320-116537 北京華宇時尚店 Company Owned 2093 Starbucks 32447-132306 北京藍色港灣圣拉娜店 Company Owned 2094 Starbucks 17477-161286 北京太陽宮凱德嘉茂店 Company Owned 2095 Starbucks 24520-237564 北京東三環北店 Company Owned ... ... ... ... ... 4820 Starbucks 17872-186929 Sands Licensed 4821 Starbucks 24126-235784 Wynn II Licensed 4822 Starbucks 28490-242269 Wynn Palace BOH Licensed 4823 Starbucks 22210-218665 Sands Cotai Central Licensed 4824 Starbucks 17108-179449 One Central Licensed Street Address City State/Province \ 2091 豐臺區, 北京西站通廊7-1號, 中關村南大街2號 北京市 11 2092 海淀區, 數碼大廈B座華宇時尚購物中心內, 藍色港灣國際商區1座C1-3單元首層、 北京市 11 2093 朝陽區朝陽公園路6號, 二層C1-3單元及二層陽臺, 太陽宮中路12號 北京市 11 2094 朝陽區, 太陽宮凱德嘉茂一層01-44/45號, 東三環北路27號 北京市 11 2095 朝陽區, 嘉銘中心大廈A座B1層024商鋪, 金融大街7號 北京市 11 ... ... ... ... 4820 Portion of Shop 04, Ground Floor, Sands, Largo... Macau 92 4821 Wynn Macau, Rua Cidada de Sintra, NAPE Macau 92 4822 Employee Entrance Outlet, Wynn Cotai, Resort Macau 92 4823 Shop K201 & K202, Level 02, Parcela 5&6, Estra... Macau 92 4824 Promenade Rd, Open Area, 2/F Macau 92 Country Postcode Phone Number Timezone Longitude \ 2091 CN 100073 NaN GMT+08:00 Asia/Beijing 116.32 2092 CN 100086 010-51626616 GMT+08:00 Asia/Beijing 116.32 2093 CN 100020 010-59056343 GMT+08:00 Asia/Beijing 116.47 2094 CN 100028 010-84150945 GMT+08:00 Asia/Beijing 116.45 2095 CN NaN NaN GMT+08:00 Asia/Beijing 116.46 ... ... ... ... ... ... 4820 CN NaN (853)28782773 GMT+08:00 Asia/Beijing 113.55 4821 CN NaN 85328723516 GMT+08:00 Asia/Beijing 113.55 4822 CN NaN NaN GMT+08:00 Asia/Beijing 113.54 4823 CN NaN 85328853439 GMT+08:00 Asia/Beijing 113.56 4824 CN NaN NaN GMT+08:00 Asia/Beijing 113.55 Latitude 2091 39.90 2092 39.97 2093 39.95 2094 39.97 2095 39.93 ... ... 4820 22.19 4821 22.19 4822 22.20 4823 22.15 4824 22.19 [2734 rows x 13 columns] ''' china_province_data = china_data.groupby(by='State/Province').count() print(china_province_data['Brand']) ''' State/Province 11 236 12 58 13 24 14 8 15 8... 62 3 63 3 64 2 91 162 92 13 Name: Brand, Length: 31, dtype: int64'''
  • DataFrameGroupBy對象方法
    方法 ??????????說明
    count?????????分組中非NA值的數量
    sum???????????非NA值的和
    mean?????????非NA值的平均值
    min,max????非NA值的最小值和最大值

4.索引和復合索引

  • 簡單的索引操作: t.index
  • 指定index: t.index = [‘a’,‘b’,‘c’]
  • 重新設置index : t.reindex([“a”,“e”])
  • 指定某一列作為index : t.set_index(“M”,drop=False)
  • 返回index的唯一值: t.set_index(“M”).index.unique()
  • 設置兩個索引的時候會是什么樣子呢?
  • 示例
# 索引和復合索引 import numpy as np import pandas as pdt1 = pd.DataFrame(np.arange(12).reshape(3, 4), index=list('ABC'), columns=list('WXYZ')) print(t1) '''W X Y Z A 0 1 2 3 B 4 5 6 7 C 8 9 10 11''' print(t1.index) # Index(['A', 'B', 'C'], dtype='object') # 重置索引 print(t1.reindex(['a','e'])) '''W X Y Z a NaN NaN NaN NaN e NaN NaN NaN NaN''' print(t1.reindex(['A','e'])) '''W X Y Z A 0.0 1.0 2.0 3.0 e NaN NaN NaN NaN''' # 指定某一列作為索引 print(t1.set_index('W')) # 默認刪除W列,以W作為行索引 '''X Y Z W 0 1 2 3 4 5 6 7 8 9 10 11''' print(t1.set_index('W',drop=False)) # 不刪除W列,以W作為行索引 '''W X Y Z W 0 0 1 2 3 4 4 5 6 7 8 8 9 10 11''' # 返回index的唯一值: t.set_index("M").index.unique() print(t1.set_index('W').index) '''Int64Index([0, 4, 8], dtype='int64', name='W')''' print(t1.set_index('W').index.unique()) '''Int64Index([0, 4, 8], dtype='int64', name='W')''' t1.loc['B','W'] = 8 print(t1) '''W X Y Z A 0 1 2 3 B 8 5 6 7 C 8 9 10 11''' print(t1.set_index('W').index.unique()) '''Int64Index([0, 8], dtype='int64', name='W')''' # 設置兩個索引 復合索引 t2 = pd.DataFrame(np.arange(12).reshape(3, 4), index=list('ABC'), columns=list('WXYZ')) print(t2) '''W X Y Z A 0 1 2 3 B 4 5 6 7 C 8 9 10 11''' print(t2.set_index(['W','X'])) '''Y Z W X 0 1 2 3 4 5 6 7 8 9 10 11''' print(type(t2.set_index(['W','X']))) # <class 'pandas.core.frame.DataFrame'>

Series復合索引

a = pd.DataFrame({‘a’: range(7),‘b’: range(7, 0, -1),‘c’: [‘one’,‘one’,‘one’,‘two’,‘two’,‘two’, ‘two’],‘d’:
list(“hjklmno”)})

設置c,d為索引

# 索引和復合索引 import numpy as np import pandas as pda = pd.DataFrame({'a': range(7), 'b': range(7, 0, -1), 'c': ['one', 'one', 'one', 'two', 'two', 'two', 'two'], 'd':list("hjklmno")}) print(type(a)) # <class 'pandas.core.frame.DataFrame'> print(a) '''a b c d 0 0 7 one h 1 1 6 one j 2 2 5 one k 3 3 4 two l 4 4 3 two m 5 5 2 two n 6 6 1 two o''' b = a.set_index(['c','d']) print(b) '''a b c d one h 0 7j 1 6k 2 5 two l 3 4m 4 3n 5 2o 6 1 ''' print(b.loc['one']) '''a b d h 0 7 j 1 6 k 2 5''' print(b.loc['one'].loc['j']) ''' a 1 b 6 Name: j, dtype: int64''' print(b.loc['one'].loc['j']['a']) # 1 c = b['a'] print(type(c)) # <class 'pandas.core.series.Series'> print(c) ''' c d one h 0j 1k 2 two l 3m 4n 5o 6 Name: a, dtype: int64''' print(c['one']['j']) # 1 print(c['one','j']) # 1

設置d,c為索引

# 索引和復合索引 import numpy as np import pandas as pda = pd.DataFrame({'a': range(7), 'b': range(7, 0, -1), 'c': ['one', 'one', 'one', 'two', 'two', 'two', 'two'], 'd':list("hjklmno")}) print(type(a)) # <class 'pandas.core.frame.DataFrame'> print(a) '''a b c d 0 0 7 one h 1 1 6 one j 2 2 5 one k 3 3 4 two l 4 4 3 two m 5 5 2 two n 6 6 1 two o''' b = a.set_index(['d','c']) print(b) '''a b d c h one 0 7 j one 1 6 k one 2 5 l two 3 4 m two 4 3 n two 5 2 o two 6 1 ''' print(b.loc['j']) '''a b c one 1 6''' print(b.loc['j'].loc['one']) ''' a 1 b 6 Name: one, dtype: int64''' print(b.loc['j'].loc['one']['a']) # 1 print(b.loc['j'].loc['one','a']) # 1 # 復合索引交換 print(b.swaplevel()) '''a b c d one h 0 7j 1 6k 2 5 two l 3 4m 4 3n 5 2o 6 1'''

DateFrame復合索引

# 索引和復合索引 import numpy as np import pandas as pda = pd.DataFrame({'a': range(7), 'b': range(7, 0, -1), 'c': ['one', 'one', 'one', 'two', 'two', 'two', 'two'], 'd':list("hjklmno")}) print(type(a)) # <class 'pandas.core.frame.DataFrame'> print(a) '''a b c d 0 0 7 one h 1 1 6 one j 2 2 5 one k 3 3 4 two l 4 4 3 two m 5 5 2 two n 6 6 1 two o''' b = a.set_index(['c','d']) print(b) '''a b c d one h 0 7j 1 6k 2 5 two l 3 4m 4 3n 5 2o 6 1 ''' # 從外層開始取值 print(b.loc['one'].loc['j','b']) # 6 # 從內層開始取值 print(b.swaplevel().loc['j'].loc['one','b']) # 6

5.練習

1.使用matplotlib呈現出店鋪總數排名前10的國家

# # 1.使用matplotlib呈現出店鋪總數排名前10的國家 # sort_values groupby import numpy as np import pandas as pd from matplotlib import pyplot as pltfile_path = './starbucks_store_worldwide.csv' df = pd.read_csv(file_path) print(df.info()) ''' <class 'pandas.core.frame.DataFrame'> RangeIndex: 25600 entries, 0 to 25599 Data columns (total 13 columns):# Column Non-Null Count Dtype --- ------ -------------- ----- 0 Brand 25600 non-null object 1 Store Number 25600 non-null object 2 Store Name 25600 non-null object 3 Ownership Type 25600 non-null object 4 Street Address 25598 non-null object 5 City 25585 non-null object 6 State/Province 25600 non-null object 7 Country 25600 non-null object 8 Postcode 24078 non-null object 9 Phone Number 18739 non-null object 10 Timezone 25600 non-null object 11 Longitude 25599 non-null float6412 Latitude 25599 non-null float64 dtypes: float64(2), object(11) memory usage: 2.5+ MB None''' data = df.groupby(by='Country').count() print(data.head(3)) '''Brand Store Number Store Name ... Timezone Longitude Latitude Country ... AD 1 1 1 ... 1 1 1 AE 144 144 144 ... 144 144 144 AR 108 108 108 ... 108 108 108[3 rows x 12 columns]''' data_sort = data.sort_values(by='Brand', ascending=False)[0:10] # 倒序 print(data_sort['Brand']) # data = df.groupby(by='Country').count()['Brand'].sort_values(ascending=False)[0:10] # print(data) # 這樣寫也可以 ''' Country US 13608 CN 2734 CA 1468 JP 1237 KR 993 GB 901 MX 579 TW 394 TR 326 PH 298 Name: Brand, dtype: int64''' x = data_sort['Brand'].index y = data_sort['Brand'].values# 設置圖片大小 plt.figure(figsize=(15, 8), dpi=80) # 直方圖 plt.bar(x, y) plt.show()

2.使用matplotlib呈現出中國每個城市的店鋪數量

# 2.使用matplotlib呈現出中國每個城市的店鋪數量import pandas as pd from matplotlib import pyplot as plt import matplotlibfont = {'family': 'SimHei','weight': 'bold','size': 12 } matplotlib.rc("font", **font)file_path = './starbucks_store_worldwide.csv' df = pd.read_csv(file_path) # print(df.info()) '''# Column Non-Null Count Dtype --- ------ -------------- ----- 0 Brand 25600 non-null object 1 Store Number 25600 non-null object 2 Store Name 25600 non-null object 3 Ownership Type 25600 non-null object 4 Street Address 25598 non-null object 5 City 25585 non-null object 6 State/Province 25600 non-null object 7 Country 25600 non-null object 8 Postcode 24078 non-null object 9 Phone Number 18739 non-null object 10 Timezone 25600 non-null object 11 Longitude 25599 non-null float6412 Latitude 25599 non-null float64 dtypes: float64(2), object(11) memory usage: 2.5+ MB None''' df = df[df['Country'] == 'CN'] # print(df.head(3)) '''Brand Store Number ... Longitude Latitude 2091 Starbucks 22901-225145 ... 116.32 39.90 2092 Starbucks 32320-116537 ... 116.32 39.97 2093 Starbucks 32447-132306 ... 116.47 39.95[3 rows x 13 columns]''' data = df.groupby(by='City').count()['Brand'].sort_values(ascending=False)[0:30] x = data.index y = data.values# 設置圖片大小 plt.figure(figsize=(15, 8), dpi=80) # 直方圖 plt.bar(x, y) # 設置x軸刻度 plt.xticks(rotation=45) plt.show()

三、pandas中的時間序列

1.時間范圍

時間范圍
pd.date_range(start=None, end=None, periods=None, freq=‘D’)
periods?? ? ? 時間范圍的個數
freq?? ? ? 頻率,以天為單位還是以月為單位
關于頻率的更多縮寫

  • 示例
# 時間序列 import pandas as pdd = pd.date_range(start='20210101', end='20210201') print(d) # freq='D' 頻率默認是天 '''DatetimeIndex(['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04','2021-01-05', '2021-01-06', '2021-01-07', '2021-01-08','2021-01-09', '2021-01-10', '2021-01-11', '2021-01-12','2021-01-13', '2021-01-14', '2021-01-15', '2021-01-16','2021-01-17', '2021-01-18', '2021-01-19', '2021-01-20','2021-01-21', '2021-01-22', '2021-01-23', '2021-01-24','2021-01-25', '2021-01-26', '2021-01-27', '2021-01-28','2021-01-29', '2021-01-30', '2021-01-31', '2021-02-01'],dtype='datetime64[ns]', freq='D')''' m = pd.date_range(start='20210101', end='20211231',freq='M') # 頻率是1月 print(m) ''' DatetimeIndex(['2021-01-31', '2021-02-28', '2021-03-31', '2021-04-30','2021-05-31', '2021-06-30', '2021-07-31', '2021-08-31','2021-09-30', '2021-10-31', '2021-11-30', '2021-12-31'],dtype='datetime64[ns]', freq='M')''' d10 = pd.date_range(start='20210101', end='20210201',freq='10D') print(d10) # freq='10D' 頻率是10天 ''' DatetimeIndex(['2021-01-01', '2021-01-11', '2021-01-21', '2021-01-31'], dtype='datetime64[ns]', freq='10D')''' d3 = pd.date_range(start='20210101', end='20210201',freq='3D') print(d3) # freq='10D' 頻率是3天 ''' DatetimeIndex(['2021-01-01', '2021-01-04', '2021-01-07', '2021-01-10','2021-01-13', '2021-01-16', '2021-01-19', '2021-01-22','2021-01-25', '2021-01-28', '2021-01-31'],dtype='datetime64[ns]', freq='3D')''' d3 = pd.date_range(start='20210101', periods=5, freq='3D') print(d3) # freq='10D' 頻率是3天 periods和end不要同時用 ''' DatetimeIndex(['2021-01-01', '2021-01-04', '2021-01-07', '2021-01-10','2021-01-13'],dtype='datetime64[ns]', freq='3D')'''

2.DataFrame中使用時間序列

index=pd.date_range(“20190101”,periods=10)
df = pd.DataFrame(np.arange(10),index=index) 作為行索引
df = pd.DataFrame(np.arange(10).reshape(1,10),columns=index) 作為列索引

  • 示例
# 使用時間序列 import pandas as pd import numpy as np# 時間序列當行索引 dindex = pd.date_range(start='20210101', periods=10) df = pd.DataFrame(np.arange(10),index=dindex) print(df) '''0 2021-01-01 0 2021-01-02 1 2021-01-03 2 2021-01-04 3 2021-01-05 4 2021-01-06 5 2021-01-07 6 2021-01-08 7 2021-01-09 8 2021-01-10 9 ''' # 時間序列當列索引 d_index = pd.date_range(start='20210101', periods=10) df1 = pd.DataFrame(np.arange(10).reshape(1,10),columns=d_index) print(df1) '''2021-01-01 2021-01-02 2021-01-03 ... 2021-01-08 2021-01-09 2021-01-10 0 0 1 2 ... 7 8 9[1 rows x 10 columns]'''

3.pandas重采樣

  • 重采樣:指的是將時間序列從一個頻率轉化為另一個頻率進行處理的過程,將高頻率數據轉化為低頻率數據為降采樣,低頻率轉化為高頻率為升采樣
  • pandas提供了一個resample的方法來幫助我們實現頻率轉化
  • 示例
# 使用時間序列 import pandas as pd import numpy as npdindex = pd.date_range(start='2021-01-01',end='2021-02-24') t = pd.DataFrame(np.arange(55).reshape(55,1),index=dindex) print(t) '''0 2021-01-01 0 2021-01-02 1 2021-01-03 2 2021-01-04 3 2021-01-05 4 2021-01-06 5 2021-01-07 6 2021-01-08 7 2021-01-09 8 2021-01-10 9 2021-01-11 10 2021-01-12 11 2021-01-13 12 2021-01-14 13 2021-01-15 14 2021-01-16 15 2021-01-17 16 2021-01-18 17 2021-01-19 18 2021-01-20 19 2021-01-21 20 2021-01-22 21 2021-01-23 22 2021-01-24 23 2021-01-25 24 2021-01-26 25 2021-01-27 26 2021-01-28 27 2021-01-29 28 2021-01-30 29 2021-01-31 30 2021-02-01 31 2021-02-02 32 2021-02-03 33 2021-02-04 34 2021-02-05 35 2021-02-06 36 2021-02-07 37 2021-02-08 38 2021-02-09 39 2021-02-10 40 2021-02-11 41 2021-02-12 42 2021-02-13 43 2021-02-14 44 2021-02-15 45 2021-02-16 46 2021-02-17 47 2021-02-18 48 2021-02-19 49 2021-02-20 50 2021-02-21 51 2021-02-22 52 2021-02-23 53 2021-02-24 54 ''' print(t.resample('M').mean()) '''0 2021-01-31 15.0 2021-02-28 42.5''' print(t.resample('10D').mean()) '''0 2021-01-01 4.5 2021-01-11 14.5 2021-01-21 24.5 2021-01-31 34.5 2021-02-10 44.5 2021-02-20 52.0'''

4.練習

練習1:統計出911數據中不同月份的電話次數

# 練習1:統計出911數據中不同月份的電話次數 import pandas as pd from matplotlib import pyplot as pltfile_path = './911.csv' df = pd.read_csv(file_path) pd.set_option('display.max_rows', 30) pd.set_option('display.max_columns', 9) # print(df.info()) ''' <class 'pandas.core.frame.DataFrame'> RangeIndex: 249737 entries, 0 to 249736 Data columns (total 9 columns):# Column Non-Null Count Dtype --- ------ -------------- ----- 0 lat 249737 non-null float641 lng 249737 non-null float642 desc 249737 non-null object 3 zip 219391 non-null float644 title 249737 non-null object 5 timeStamp 249737 non-null object 6 twp 249644 non-null object 7 addr 249737 non-null object 8 e 249737 non-null int64 dtypes: float64(3), int64(1), object(5) memory usage: 17.1+ MB None ''' # print(df['timeStamp']) '''0 2015-12-10 17:10:52... 249736 2017-09-20 19:42:29 Name: timeStamp, Length: 249737, dtype: object''' df['timeStamp'] = pd.to_datetime(df['timeStamp']) # 把時間字符串轉為索引 # print(df['timeStamp']) ''' 0 2015-12-10 17:10:52... 249736 2017-09-20 19:42:29 Name: timeStamp, Length: 249737, dtype: datetime64[ns]''' df.set_index('timeStamp', inplace=True) # print(df) '''lat lng \ timeStamp 2015-12-10 17:10:52 40.297876 -75.581294 ... ... ... 2017-09-20 19:42:29 40.095206 -75.410735 desc \ timeStamp 2015-12-10 17:10:52 REINDEER CT & DEAD END; NEW HANOVER; Station ... ... ... 2017-09-20 19:42:29 1ST AVE & MOORE RD; UPPER MERION; 2017-09-20 @... zip title twp \ timeStamp 2015-12-10 17:10:52 19525.0 EMS: BACK PAINS/INJURY NEW HANOVER ... ... ... ... 2017-09-20 19:42:29 19406.0 Traffic: VEHICLE ACCIDENT - UPPER MERION addr e timeStamp 2015-12-10 17:10:52 REINDEER CT & DEAD END 1 ... ... .. 2017-09-20 19:42:29 1ST AVE & MOORE RD 1 [249737 rows x 8 columns] ''' count_by_month = df.resample('M').count()['lat'] print(count_by_month) ''' timeStamp 2015-12-31 7916 2016-01-31 13096 2016-02-29 11396 2016-03-31 11059 2016-04-30 11287 2016-05-31 11374 2016-06-30 11732 2016-07-31 12088 2016-08-31 11904 2016-09-30 11669 2016-10-31 12502 2016-11-30 12091 2016-12-31 12162 2017-01-31 11605 2017-02-28 10267 2017-03-31 11684 2017-04-30 11056 2017-05-31 11719 2017-06-30 12333 2017-07-31 11768 2017-08-31 11753 2017-09-30 7276 Freq: M, Name: lat, dtype: int64 ''' # 繪制折線圖分析變化趨勢 x = count_by_month.index y = count_by_month.values x = [i.strftime("%Y%m%d") for i in x] # 轉化為時間日期格式。 plt.figure(figsize=(15, 8), dpi=80) plt.plot(range(len(x)), y) plt.xticks(range(len(x)), x, rotation=45) plt.show()

https://www.kaggle.com/uciml/pm25-data-for-five-chinese-cities

練習2現在我們有北上廣、深圳、和沈陽5個城市空氣質量數據,請繪制出5個城市的PM2.5隨時間的變化情況

數據來源:https://www.kaggle.com/uciml/pm25-data-for-five-chinese-cities
觀察這組數據中的時間結構,并不是字符串,這個時候我們應該怎么辦?

之前所學習的DatetimeIndex可以理解為時間戳
那么現在我們要學習的PeriodIndex可以理解為時間段
periods = pd.PeriodIndex(year=df[“year”],month=df[“month”],day=df[“day”],hour=df[“hour”],freq=“H”)
那么如果給這個時間段降采樣呢?
data = df.set_index(periods).resample(“10D”).mean()

# 現在我們有北上廣、深圳、和沈陽5個城市空氣質量數據,請繪制出5個城市的PM2.5隨時間的變化情況 import pandas as pd from matplotlib import pyplot as pltdf = pd.read_csv('./PM2.5/BeijingPM20100101_20151231.csv') # print(df.info()) ''' <class 'pandas.core.frame.DataFrame'> RangeIndex: 52584 entries, 0 to 52583 Data columns (total 18 columns):# Column Non-Null Count Dtype --- ------ -------------- ----- 0 No 52584 non-null int64 1 year 52584 non-null int64 2 month 52584 non-null int64 3 day 52584 non-null int64 4 hour 52584 non-null int64 5 season 52584 non-null int64 6 PM_Dongsi 25052 non-null float647 PM_Dongsihuan 20508 non-null float648 PM_Nongzhanguan 24931 non-null float649 PM_US Post 50387 non-null float6410 DEWP 52579 non-null float6411 HUMI 52245 non-null float6412 PRES 52245 non-null float6413 TEMP 52579 non-null float6414 cbwd 52579 non-null object 15 Iws 52579 non-null float6416 precipitation 52100 non-null float6417 Iprec 52100 non-null float64 dtypes: float64(11), int64(6), object(1) memory usage: 7.2+ MB None''' pd.set_option('display.max_rows', 30) pd.set_option('display.max_columns', 18) # print(df.head()) '''No year month day hour season PM_Dongsi PM_Dongsihuan \ 0 1 2010 1 1 0 4 NaN NaN 1 2 2010 1 1 1 4 NaN NaN 2 3 2010 1 1 2 4 NaN NaN 3 4 2010 1 1 3 4 NaN NaN 4 5 2010 1 1 4 4 NaN NaN PM_Nongzhanguan PM_US Post DEWP HUMI PRES TEMP cbwd Iws \ 0 NaN NaN -21.0 43.0 1021.0 -11.0 NW 1.79 1 NaN NaN -21.0 47.0 1020.0 -12.0 NW 4.92 2 NaN NaN -21.0 43.0 1019.0 -11.0 NW 6.71 3 NaN NaN -21.0 55.0 1019.0 -14.0 NW 9.84 4 NaN NaN -20.0 51.0 1018.0 -12.0 NW 12.97 precipitation Iprec 0 0.0 0.0 1 0.0 0.0 2 0.0 0.0 3 0.0 0.0 4 0.0 0.0 ''' # pd.PeriodIndex 把分開的時間字符串通過PeriodIndex的方法轉換為pandas的時間類型 periods = pd.PeriodIndex(year=df["year"], month=df["month"], day=df["day"], hour=df["hour"], freq="H") # print(periods) ''' PeriodIndex(['2010-01-01 00:00', '2010-01-01 01:00', '2010-01-01 02:00','2010-01-01 03:00', '2010-01-01 04:00', '2010-01-01 05:00','2010-01-01 06:00', '2010-01-01 07:00', '2010-01-01 08:00','2010-01-01 09:00',...'2015-12-31 14:00', '2015-12-31 15:00', '2015-12-31 16:00','2015-12-31 17:00', '2015-12-31 18:00', '2015-12-31 19:00','2015-12-31 20:00', '2015-12-31 21:00', '2015-12-31 22:00','2015-12-31 23:00'],dtype='period[H]', length=52584, freq='H') ''' df['datetime'] = periods df.set_index('datetime',inplace=True) # print(df.head()) '''No year month day hour season PM_Dongsi \ datetime 2010-01-01 00:00 1 2010 1 1 0 4 NaN 2010-01-01 01:00 2 2010 1 1 1 4 NaN 2010-01-01 02:00 3 2010 1 1 2 4 NaN 2010-01-01 03:00 4 2010 1 1 3 4 NaN 2010-01-01 04:00 5 2010 1 1 4 4 NaN PM_Dongsihuan PM_Nongzhanguan PM_US Post DEWP HUMI \ datetime 2010-01-01 00:00 NaN NaN NaN -21.0 43.0 2010-01-01 01:00 NaN NaN NaN -21.0 47.0 2010-01-01 02:00 NaN NaN NaN -21.0 43.0 2010-01-01 03:00 NaN NaN NaN -21.0 55.0 2010-01-01 04:00 NaN NaN NaN -20.0 51.0 PRES TEMP cbwd Iws precipitation Iprec datetime 2010-01-01 00:00 1021.0 -11.0 NW 1.79 0.0 0.0 2010-01-01 01:00 1020.0 -12.0 NW 4.92 0.0 0.0 2010-01-01 02:00 1019.0 -11.0 NW 6.71 0.0 0.0 2010-01-01 03:00 1019.0 -14.0 NW 9.84 0.0 0.0 2010-01-01 04:00 1018.0 -12.0 NW 12.97 0.0 0.0 ''' # 進行降采樣 df = df.resample('10D').mean() # 處理缺失數據 data = df['PM_US Post'].dropna() # print(data) ''' datetime 2010-01-01 23:00 129.0 2010-01-02 00:00 148.0 2010-01-02 01:00 159.0 2010-01-02 02:00 181.0 2010-01-02 03:00 138.0... 2015-12-31 19:00 133.0 2015-12-31 20:00 169.0 2015-12-31 21:00 203.0 2015-12-31 22:00 212.0 2015-12-31 23:00 235.0 Freq: H, Name: PM_US Post, Length: 50387, dtype: float64 ''' x = data.index y = data.values plt.figure(figsize=(15,8),dpi=80) plt.plot(range(len(x)),y) plt.xticks(range(0,len(x),10),list(x)[::10],rotation=45) plt.show()

四、pandas畫圖

1.折線圖

# pandas繪圖 from matplotlib import pyplot as plt import pandas as pdiris_data = pd.read_csv('iris.csv') # print(iris_data.info()) ''' <class 'pandas.core.frame.DataFrame'> RangeIndex: 150 entries, 0 to 149 Data columns (total 5 columns):# Column Non-Null Count Dtype --- ------ -------------- ----- 0 SepalLength 150 non-null float641 SepalWidth 150 non-null float642 PetalLength 150 non-null float643 PetalWidth 150 non-null float644 Name 150 non-null object dtypes: float64(4), object(1) memory usage: 6.0+ KB None ''' # 折線圖 iris_data.plot() plt.show()

2.分組柱狀圖

# pandas繪圖 from matplotlib import pyplot as plt import pandas as pdiris_data = pd.read_csv('iris.csv') # print(iris_data.info())# 分組柱狀圖 iris_data.groupby('Name').mean().plot(kind='bar') plt.show()

2.餅圖

# pandas繪圖 from matplotlib import pyplot as plt import pandas as pdiris_data = pd.read_csv('iris.csv') # print(iris_data.info())# 餅圖 iris_data.groupby('Name').size().plot(kind='pie',autopct='%.2f%%') plt.show()

總結

以上是生活随笔為你收集整理的数据分析 第七讲 pandas练习 数据的合并、分组聚合、时间序列、pandas绘图的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

又黄又爽又湿又无遮挡的在线视频 | 中文字幕在线观看的网站 | 夜夜操网 | 国色天香在线观看 | 亚洲无人区小视频 | 五月天中文在线 | 香蕉在线视频观看 | 黄网站色视频免费观看 | 亚洲精品999| 色资源中文字幕 | 麻豆成人精品 | av成人在线看 | 国产精品短视频 | 欧美 日韩 性| 91成人天堂久久成人 | 一级一片免费看 | 久久综合久久综合久久 | 亚洲国产成人精品在线 | 黄色av免费在线 | 国产成人精品一区二区三区在线观看 | 日韩大陆欧美高清视频区 | 超碰人人草人人 | 91视频 - x99av | 在线视频一二三 | 美女在线观看av | 日本中文字幕电影在线免费观看 | 精品国内自产拍在线观看视频 | 波多野结衣日韩 | 日本天天色 | 欧美一区二区三区免费看 | 在线免费观看黄色 | 国产精品毛片久久蜜 | 亚洲精品午夜久久久久久久久久久 | 久久国产精品影视 | 国产精品美女久久久久久久 | 嫩嫩影院理论片 | 亚洲精品网站在线 | 国产成人在线观看 | 婷婷综合 | 亚洲视频aaa| 国产精品午夜在线观看 | 黄色小网站在线观看 | 成人观看 | 成人毛片a| 久久观看最新视频 | 亚洲精品无 | 国产精品国产亚洲精品看不卡 | 天天操天天射天天舔 | 美女啪啪图片 | 永久免费的啪啪网站免费观看浪潮 | 久久久久久蜜av免费网站 | 国产福利av| 四虎成人精品 | 91精品福利在线 | 精品在线观 | 色久综合 | 开心激情久久 | 国产日韩精品在线 | 日韩欧美在线一区 | 18av在线视频 | 奇米网网址| 欧美日韩精品免费观看 | 天天综合色网 | 日韩免费网址 | 91人人揉日日捏人人看 | 不卡视频在线看 | 久久久www成人免费毛片麻豆 | 成人午夜毛片 | 午夜精品一区二区三区在线 | 在线免费中文字幕 | av一级在线 | 男女视频国产 | 国产成人精品综合久久久 | 中文视频在线看 | 91精品久久久久久久91蜜桃 | 国产 一区二区三区 在线 | 久日精品 | 国产午夜影院 | 久草在线免费看视频 | 久久官网 | 婷婷激情5月天 | 日韩在线观看第一页 | 国产精品18久久久久久vr | 中文字幕成人 | 日韩在线精品一区 | 国产麻豆视频 | 日韩在线字幕 | 国产精品日韩高清 | 亚洲成色777777在线观看影院 | 日本精品xxxx | 久久国色夜色精品国产 | www操操操| 91视频免费看片 | 中文字幕在线播出 | 国产一级片观看 | 亚洲www天堂com | 精品九九久久 | 国产亚洲精品bv在线观看 | 成人午夜精品久久久久久久3d | 美腿丝袜一区二区三区 | 国产看片 色 | 欧美小视频在线观看 | 99电影456麻豆 | www.夜夜夜| 色www免费视频 | 色综合久久中文字幕综合网 | a天堂最新版中文在线地址 久久99久久精品国产 | 成人午夜精品福利免费 | 免费成人在线视频网站 | 日韩黄色软件 | 一级黄色av| 一区二区毛片 | 欧美久久精品 | 精品视频久久久久久 | www夜夜 | 91av在线免费观看 | 欧美精品亚洲二区 | 日韩午夜精品 | 欧美淫aaa免费观看 日韩激情免费视频 | 精品综合久久 | 日日日爽爽爽 | 超碰在线观看av | 国产不卡精品 | 欧美日韩国产一区二区三区在线观看 | 天天干天天操 | 中文字幕久久精品亚洲乱码 | 欧美激精品 | 一区二区三区免费播放 | 亚洲小视频在线观看 | 久久国产精品精品国产色婷婷 | 欧美精品乱码99久久影院 | 黄色毛片视频免费 | 国产午夜在线观看 | 日韩免费观看高清 | 国产69精品久久99的直播节目 | 91传媒免费在线观看 | 精品在线你懂的 | 国语精品免费视频 | 2019免费中文字幕 | 97成人免费| 成人久久久久久久久 | 国产在线播放一区二区 | 六月色丁香 | 国产精品久久久久av | 日韩在线观看的 | 亚洲欧美视频网站 | av黄色国产| 国产在线超碰 | 国产精品成人自产拍在线观看 | av在线播放快速免费阴 | 97精品国产一二三产区 | 最近免费中文视频 | 性色在线视频 | 国产精品中文久久久久久久 | 婷婷色综合网 | 久久99偷拍视频 | 婷婷六月天综合 | 91网在线 | 中文字幕在线播放视频 | 波多野结衣亚洲一区二区 | 国产精品久久久久久久久软件 | 911香蕉视频| 欧美极品少妇xbxb性爽爽视频 | 中文字幕文字幕一区二区 | 狠狠色丁香婷婷综合最新地址 | 美女av免费看 | 天天激情天天干 | 99精品视频免费观看 | 国产精品一区二区在线看 | 激情黄色一级片 | 国产又粗又猛又黄又爽的视频 | 热久久99这里有精品 | 日韩视频a | 国产精品 999 | 一级成人在线 | 成人欧美一区二区三区在线观看 | 欧美一级日韩免费不卡 | 国产小视频免费在线网址 | 久草在线免费色站 | 久久久精品99 | 中文字幕亚洲国产 | 亚洲精品字幕在线 | 91精品视频免费看 | 91黄色在线看 | 91亚洲视频在线观看 | 久久午夜精品影院一区 | 欧美激情在线网站 | 五月婷婷综合久久 | 国产精品久久亚洲 | 成人av视屏| 精品久久久成人 | 国产热re99久久6国产精品 | 国产无套一区二区三区久久 | 国产成人免费观看久久久 | 国产一在线精品一区在线观看 | 一区二区三区日韩在线观看 | 久久久久久久免费 | 久草视频在线新免费 | 久久久国产网站 | 极品久久久久 | 中文字幕在线观看第一页 | 西西人体4444www高清视频 | 欧美精品生活片 | 国产欧美最新羞羞视频在线观看 | 欧美日韩国内在线 | 日韩欧美69| 91秒拍国产福利一区 | 免费能看的黄色片 | 特级xxxxx欧美 | 91麻豆国产福利在线观看 | a级片在线播放 | 高清久久久久久 | 天天干,天天射,天天操,天天摸 | 久久女同性恋中文字幕 | 久久精品99| 亚洲黄色成人av | 国产成人精品国内自产拍免费看 | 国产精品久久久久久久妇 | 超碰av在线 | 免费在线成人av电影 | 黄污视频网站大全 | 国产欧美三级 | 久久久久久久99精品免费观看 | 黄色中文字幕在线 | 国产精品刺激对白麻豆99 | 国产又粗又猛又黄视频 | 日本激情视频中文字幕 | 在线日韩av | 最新高清无码专区 | 国产成人久久77777精品 | 免费在线观看av网站 | 91在线观看黄 | 麻花天美星空视频 | 国产综合香蕉五月婷在线 | 97网在线观看 | 97超碰人人 | 欧美日韩精品在线 | 国产小视频国产精品 | 国产精品久久一区二区三区, | 一区中文字幕电影 | 国产不卡片| 91麻豆看国产在线紧急地址 | 久久精品视频在线观看 | 亚洲综合色视频在线观看 | 粉嫩av一区二区三区四区 | 97超级碰碰碰碰久久久久 | 国产精品久久久久久久久久妇女 | 免费在线观看一区 | 一区二区av | 亚洲国产高清在线观看视频 | 成人中文字幕+乱码+中文字幕 | 91麻豆精品国产91久久久久久 | 国产 欧美 日产久久 | 日日操日日 | 成人久久综合 | 国产高清在线观看av | 亚洲精品免费在线视频 | 亚洲伦理中文字幕 | 国产91免费看 | 午夜在线免费观看 | 99视频精品视频高清免费 | 日韩a级免费视频 | 日韩av一区二区在线播放 | 黄网站色欧美视频 | 久久久亚洲国产精品麻豆综合天堂 | 成人亚洲网 | 99热国内精品 | 人人看97 | 久久久久久黄 | 午夜电影久久 | 国产欧美精品xxxx另类 | 亚洲伊人av | 丁香六月综合网 | 中文字幕在线免费观看视频 | 精品av在线播放 | 免费黄色激情视频 | 精品久久一区 | 韩国av电影网| 久久精品香蕉 | 国产精品videoxxxx | 国产精品一区二区三区在线免费观看 | 色噜噜噜 | 人人爽人人澡人人添人人人人 | 亚洲欧美国产精品久久久久 | 人人爽夜夜爽 | 精品日韩中文字幕 | 国产99久久久精品 | 国产精品不卡 | 亚州av一区 | 99re国产 | 91人人爽人人爽人人精88v | 中文字幕在线观看完整 | 久久久久久久av | 亚洲精品乱码久久久久久蜜桃不爽 | 怡红院av| 亚洲成人蜜桃 | 久久精品亚洲精品国产欧美 | 欧美精品在线观看免费 | 国产精品美女 | 亚洲专区中文字幕 | 狠狠狠狠狠狠狠狠 | 国产精品久久一区二区三区, | 亚洲夜夜网 | 精品中文字幕视频 | 超碰在线个人 | 99爱国产精品 | 干天天 | 日韩在线视频观看 | 中文字幕 在线 一 二 | 国产看片网站 | 另类五月激情 | 992tv成人免费看片 | 在线播放亚洲激情 | 久久亚洲影视 | 三级黄免费看 | 在线欧美a | 亚洲精品视频网站在线观看 | 欧美人人爱 | 久久久在线免费观看 | 久久久午夜剧场 | 婷婷综合久久 | 91人人爽人人爽人人精88v | 一二三区在线 | 成人精品在线 | 久久久久国产精品一区 | 天天综合日日夜夜 | 亚洲人av免费网站 | 一区二区精品视频 | 丁香一区二区 | 国产成人精品女人久久久 | 成人欧美一区二区三区在线观看 | 久久久久久久影视 | 婷婷色在线观看 | 国产福利91精品一区 | 亚洲国产精品成人女人久久 | 亚州av网站大全 | 欧美性久久久 | 国产精品久久久久久久久久久久午夜片 | 婷婷色视频 | 激情小说 五月 | 日韩欧美在线视频一区二区三区 | 日韩中文字 | 91视频3p | 国产精品毛片完整版 | 中文字幕日韩电影 | 国产精品成人国产乱 | www色综合 | 精品国产一二三四区 | 亚洲在线网址 | 欧美一级黄大片 | 国产精品99蜜臀久久不卡二区 | 毛片黄色一级 | 久久久久成人精品 | 97人人网 | 亚洲精品国久久99热 | 国产成人久久 | 91精品国产乱码在线观看 | 久久久国产精华液 | 91丨九色丨蝌蚪丰满 | 男女拍拍免费视频 | 三级av在线免费观看 | 91精品国产乱码在线观看 | 成年人免费在线播放 | 欧美一区二区三区激情视频 | 99久久久久久国产精品 | 7777精品伊人久久久大香线蕉 | 欧美不卡视频在线 | www.在线观看视频 | 久草视频手机在线 | 91黄色免费网站 | 国产美女永久免费 | 手机在线视频福利 | 日韩黄色av网站 | 久久亚洲福利视频 | 国产精品你懂的在线观看 | 女人高潮特级毛片 | 久久久久久久av麻豆果冻 | 久久99久久99免费视频 | 91高清免费在线观看 | 久久av伊人 | 精品一区二区6 | 五月婷婷综合在线观看 | 一区二区三区在线影院 | 午夜av在线播放 | 最近中文字幕国语免费高清6 | 91在线最新 | 超碰97中文 | 日韩一级网站 | 成人免费亚洲 | 国产高清av免费在线观看 | 中文字幕精品视频 | 亚洲第一伊人 | 国产精品一区二区你懂的 | 国产伦理久久精品久久久久_ | 激情欧美在线观看 | 成人看片 | 亚洲成人av在线播放 | 在线亚州 | 亚洲精品乱码久久久久久蜜桃不爽 | 国产中文字幕网 | 天天干天天想 | 亚洲高清在线观看视频 | 丁香六月激情 | 久久精品国产亚洲 | 麻豆传媒视频在线免费观看 | 最近2019中文免费高清视频观看www99 | 国产99久久| 天天操天天射天天爱 | 免费网站观看www在线观看 | 久久在线免费视频 | 久久国产免费看 | av免费在线免费观看 | 少妇性aaaaaaaaa视频 | 中文字幕在线观看你懂的 | 免费观看性生活大片3 | 亚洲精品www| 久久影视精品 | 东方av在线免费观看 | 国产亚洲一区 | 五月天av在线| 夜又临在线观看 | 欧美极品xxxxx | 日本中文不卡 | 亚洲影院一区 | 福利一区在线视频 | 在线免费中文字幕 | 亚洲成人黄色在线 | 欧美日韩大片在线观看 | 欧美午夜精品久久久久久孕妇 | 四虎在线永久免费观看 | 97av免费视频 | 久久视频在线观看免费 | 国产精品情侣视频 | 亚洲电影影音先锋 | 免费在线观看av网站 | 中文字幕资源网 国产 | 麻豆va一区二区三区久久浪 | 午夜成人免费电影 | 日本一区二区不卡高清 | 亚洲一区动漫 | 国产99久久久欧美黑人 | 成年美女黄网站色大片免费看 | 日韩乱理 | 在线视频日韩精品 | 99精品电影 | 精品国产a | 免费av网站观看 | 久草在线视频免赞 | 91精品在线视频 | 日韩欧美国产免费播放 | 日日夜夜干 | 欧美va日韩va | 午夜精选视频 | 最近更新好看的中文字幕 | 亚洲综合五月天 | 国产无套精品久久久久久 | 久久综合九色综合97_ 久久久 | 91在线欧美 | 日日夜夜天天射 | 免费福利在线 | 人人爱人人做人人爽 | 久久1区 | 综合久久五月天 | 日本 在线 视频 中文 有码 | 久产久精国产品 | 色视频网站在线观看一=区 a视频免费在线观看 | 日韩理论电影在线观看 | 99se视频在线观看 | 免费高清在线观看成人 | 精精国产xxxx视频在线播放 | 国产色在线 | 综合中文字幕 | 国产一区二区三区高清播放 | 国产伦精品一区二区三区四区视频 | 日韩精品在线一区 | 亚洲网站在线 | 亚洲综合视频在线 | 色婷婷狠狠 | 黄色av电影在线 | 亚洲专区免费观看 | 在线成人免费电影 | 91av视频免费在线观看 | 91av视频免费在线观看 | 免费看片在线观看 | 超碰成人网 | 亚洲影视九九影院在线观看 | 久久久99精品免费观看app | 久久视频免费 | 综合黄色网 | 久久激情小视频 | 91免费观看 | 91麻豆精品国产91久久久久久久久 | 久色婷婷 | 婷婷精品国产一区二区三区日韩 | www.久热 | 在线观看 亚洲 | 日韩在线观看中文 | avove黑丝| 免费在线观看av | 久久精品视频免费 | 天天干天天做 | 人人爱人人添 | 国产精品美女999 | 黄www在线观看 | 成人四虎| 国产高清黄 | 天天综合网 天天综合色 | 久久久精品99 | 午夜精品福利一区二区 | 黄色成人在线观看 | 九九九热精品免费视频观看网站 | 日韩一区二区免费视频 | 亚洲成人软件 | 久久久伊人网 | 国产电影一区二区三区四区 | 五月婷婷在线综合 | 午夜电影一区 | 免费a级黄色毛片 | 久久免费av | 国产91影院 | 欧美午夜一区二区福利视频 | 怡红院成人在线 | 超碰97在线看 | 一区二区三区久久精品 | 99精品在线免费在线观看 | 综合色久 | 日韩理论在线播放 | 日韩电影在线观看中文字幕 | 成人av电影免费观看 | 日本久久久久久 | 91久久国产自产拍夜夜嗨 | 亚洲精品一区二区三区在线观看 | 久久国产精品免费观看 | 午夜影视剧场 | 色多多视频在线观看 | 中文亚洲欧美日韩 | 天天色天天骑天天射 | 九九爱免费视频 | 九精品 | 日韩av电影中文字幕在线观看 | 在线看中文字幕 | 国产一区视频在线播放 | 久久久国产精品网站 | 欧美日韩免费观看一区=区三区 | 天天操婷婷 | 亚洲最快最全在线视频 | 91在线免费观看国产 | 狠狠躁18三区二区一区ai明星 | 麻豆传媒精品 | 成人h视频在线 | 日韩有码在线观看视频 | 成人久久精品视频 | 日本中文字幕免费观看 | 99欧美 | 夜夜视频欧洲 | 探花国产在线 | 91免费观看国产 | 一区二区三区四区精品视频 | 丁香六月婷 | 麻豆视频国产精品 | 91精品视频观看 | 成人av av在线| 亚洲乱码久久 | 最近av在线| 亚洲一级理论片 | 黄色视屏免费在线观看 | 国产美女免费视频 | 永久免费看av | 在线观看中文av | 久久中文欧美 | 国产aa免费视频 | 日韩精品观看 | 成年人黄色免费看 | 欧美日韩国产精品爽爽 | 国精产品999国精产 久久久久 | 国产精品资源在线观看 | 婷婷精品国产一区二区三区日韩 | 国产玖玖视频 | 欧美一级片在线播放 | 国产精品美女久久久久久久 | 日韩高清一 | 97电影在线观看 | 欧美日韩国产一区二区三区 | 二区在线播放 | 91av视频网| 91精品国产麻豆国产自产影视 | 免费av福利 | 99热这里只有精品久久 | 中文字幕在线视频一区二区三区 | 欧美成亚洲 | 国产精品久久久久9999 | 国产精品理论视频 | 欧美国产日韩一区二区三区 | 麻豆94tv免费版 | 欧美小视频在线 | 国产原创在线 | 超碰人人国产 | 丰满少妇在线观看资源站 | 精品91视频| 欧美日韩不卡在线观看 | 国产剧情在线一区 | 国产精品18久久久久久久久久久久 | 久久r精品 | 精品国产一区二区三区免费 | 日韩精品中文字幕久久臀 | 欧美日本日韩aⅴ在线视频 插插插色综合 | 久久99免费视频 | 亚洲电影图片小说 | 四川bbb搡bbb爽爽视频 | 波多野结衣电影一区 | 亚洲国产日韩欧美 | 蜜臀av网址| 日韩一区二区免费播放 | 精品国产人成亚洲区 | 天天操夜夜干 | 香蕉在线播放 | 中文字幕丰满人伦在线 | 麻豆91在线看 | 在线a视频 | 精品一区二区免费在线观看 | 天天色天天操综合网 | 国产精品免费视频一区二区 | 91视频在线国产 | 亚洲国产视频a | 国产精品女 | 黄色毛片网站在线观看 | 国产精品久久久久久久久费观看 | 久久久久久久综合色一本 | 日本黄色免费看 | 欧美日韩中文国产一区发布 | 精品一二三四五区 | 国产高清在线a视频大全 | 国产伦理久久精品久久久久_ | 国产97在线播放 | 天天操天天射天天舔 | 亚洲乱码精品久久久久 | 超碰人人超碰 | 国产高清中文字幕 | 久久久久国产一区二区三区 | 波多野结衣在线播放一区 | 美女网站色在线观看 | 中文字幕资源在线观看 | 色噜噜在线观看视频 | 亚洲精品免费视频 | 干狠狠 | 九月婷婷人人澡人人添人人爽 | 亚洲欧美国产精品va在线观看 | 三级小视频在线观看 | zzijzzij日本成熟少妇 | 成人一级 | 亚洲综合精品在线 | 亚洲免费a | 一区二区三区在线观看免费视频 | 人人爱人人爽 | 欧美一级免费高清 | 干av在线 | 视频一区二区三区视频 | 国产精品一区二区久久久 | 国产高清一区二区 | 日韩国产欧美在线视频 | 最新的av网站 | 久久久首页 | a色视频| 最新国产在线观看 | 久久久久久综合 | 97超级碰碰碰碰久久久久 | 日韩理论视频 | 9在线观看免费高清完整版在线观看明 | 色多视频在线观看 | 日韩影视在线观看 | 国产精品久久免费看 | 国产不卡毛片 | 黄色一级在线免费观看 | 99亚洲天堂 | 精品久久久久国产 | 亚洲国产日韩一区 | 国产精品一区二 | 激情av一区二区 | 在线国产专区 | 热久久免费国产视频 | 婷婷六月天综合 | 青青久视频 | 夜夜爽88888免费视频4848 | 亚洲一二三在线 | 日本精品小视频 | 亚洲一二三在线 | 丁香花五月 | 精品久久久久国产免费第一页 | 美女久久视频 | 国产 字幕 制服 中文 在线 | 91三级视频| 91在线产啪 | 麻豆视频在线播放 | 久草视频免费观 | 久久国际影院 | 激情电影在线观看 | 69精品视频在线观看 | 粉嫩高清一区二区三区 | 久久久久久久福利 | 激情小说网站亚洲综合网 | 激情网色 | 国产不卡视频在线播放 | 日日爱网站 | 九九热在线精品 | 99视频99| 国产 视频 久久 | 亚洲成人二区 | 日日夜夜免费精品 | 五月婷婷久 | 91精品国自产拍天天拍 | 亚洲专区路线二 | 韩国三级av在线 | 亚洲精品自拍视频在线观看 | 视频在线观看一区 | 国产高清亚洲 | 右手影院亚洲欧美 | 亚洲开心激情 | 欧美一区二区精美视频 | 国产黄色片一级三级 | 99精品热视频 | 久久国产福利 | 91在线免费视频观看 | 深爱开心激情 | 国产精品原创av片国产免费 | 99色视频 | 日韩久久精品一区二区三区 | 久草精品资源 | 免费黄色一区 | 波多野结衣电影一区 | 久久久久www | 中文字幕之中文字幕 | 色婷丁香 | 国产精品久久久久久999 | 美女视频a美女大全免费下载蜜臀 | 国产不卡精品 | 黄色成人毛片 | 日韩在线精品一区 | 激情一区二区三区欧美 | 9999精品| 欧美一二三在线 | 特级毛片网 | 香蕉视频最新网址 | 91大神精品视频在线观看 | 色视频成人在线观看免 | 久久免费视频4 | 久久超碰在线 | 黄色精品网站 | 国产免费黄视频在线观看 | 日日日日日 | 日韩三级视频在线看 | 99精品国产成人一区二区 | www久久精品| 日日草av| 国产区精品在线观看 | 麻豆视频在线 | 欧美日韩精品免费观看 | 免费看一级一片 | 日韩婷婷 | 一区中文字幕在线观看 | 国产视频导航 | 一区二区三区中文字幕在线观看 | 国产一级二级在线观看 | 国产成人精品久久二区二区 | 亚洲精品国产第一综合99久久 | 免费视频你懂的 | 久久免视频 | 久久资源总站 | 亚洲二区精品 | 久久久精品一区二区三区 | 久久精品影视 | 日韩美女高潮 | 中文字幕av一区二区三区四区 | 91精品专区| 超碰在线公开免费 | www.天天操| 99国产精品久久久久久久久久 | 国产理论影院 | 久久久免费国产 | 天天操·夜夜操 | 中文字幕在线视频第一页 | 亚洲欧洲成人 | 日本在线观看一区二区 | 中文字幕免费高清 | 国产在线高清视频 | 精品视频在线免费 | 欧美激情视频一二区 | 国产精品理论片 | 黄色成年网站 | 欧美国产日韩一区二区三区 | 99久免费精品视频在线观看 | 99久久精品免费看国产免费软件 | 91av原创| 在线色吧| 五月激情视频 | 98涩涩国产露脸精品国产网 | 成人毛片一区 | 一区二区三区精品久久久 | 国产精品美女999 | 中文字幕在线视频精品 | 狠狠干狠狠插 | 99热最新地址 | 久久99国产精品久久 | 亚洲精品h | 欧洲激情在线 | 国产精品久久久久久久久久久久午夜片 | 日韩一区二区三免费高清在线观看 | 日韩理论电影在线观看 | 日韩动态视频 | 中文字幕成人网 | 热久久视久久精品18亚洲精品 | 欧美日韩在线视频免费 | 91中文在线观看 | 成年人免费电影在线观看 | 亚洲精品免费播放 | 亚洲91中文字幕无线码三区 | 中文字幕观看视频 | 九九视频一区 | 欧美精品在线免费 | 2023国产精品自产拍在线观看 | 中国一级片在线观看 | 成人a视频片观看免费 | 一区二区成人国产精品 | 久久影视一区二区 | 日韩久久精品一区二区三区下载 | 在线一二三四区 | 婷婷六月综合亚洲 | 二区三区视频 | 操操日 | 国产福利91精品一区二区三区 | 久久视频免费在线 | 日韩1级片| 国产精品综合久久久 | 色综合天天色 | 在线视频麻豆 | 久久欧美在线电影 | 久久黄色免费 | 三级视频国产 | 亚洲成人av在线播放 | 91.精品高清在线观看 | 亚洲高清av | 久久国产精品二国产精品中国洋人 | 久久国语 | 激情综合色播五月 | 欧美在线视频一区二区三区 | av福利在线 | 国产欧美中文字幕 | 成人在线免费看 | 日本精品视频在线播放 | 国产不卡免费视频 | 久久久色 | 精品一区91 | 伊人黄色网 | 亚洲欧洲xxxx | 久久国产免费视频 | 一区二区视频在线播放 | 狠狠插狠狠操 | 狠狠综合网 | 久久综合九色综合久99 | 99国产在线观看 | 日本爽妇网 | 免费看的黄网站软件 | 日本中文字幕一二区观 | 成人在线一区二区三区 | 99国产视频| 精品亚洲一区二区三区 | 在线观看免费成人av | 日韩欧美69 | 国产精品成人久久久久 | 婷婷色中文网 | 丁香婷婷激情啪啪 | 在线播放 一区 | 99久久久精品| 日韩有码第一页 | 天天射天天射天天 | 亚洲精品乱码久久久久久蜜桃欧美 | 日韩三区在线观看 | 99这里只有久久精品视频 | 久久婷婷国产色一区二区三区 | 欧美二区视频 | 99久久久成人国产精品 | 超碰97公开 | 国产探花 | 日韩网站免费观看 | 国产黄在线| 亚洲午夜精品久久久久久久久久久久 | 99久久毛片 | 国产又粗又猛又爽又黄的视频免费 | 免费一级片在线观看 | 波多野结衣理论片 | 欧美美女视频在线观看 | 婷婷五综合 | а天堂中文最新一区二区三区 | 日韩在线字幕 | 亚洲男模gay裸体gay | 午夜精品一区二区三区四区 | 久久精品国产亚洲精品 | 亚洲精品午夜久久久久久久久久久 | 国产一二三在线视频 | 欧美激情片在线观看 | 天天搞夜夜骑 | 日韩午夜电影院 | av电影免费在线 | 日黄网站 | 超碰日韩 | 高潮久久久久久久久 | 91视频高清完整版 | 五月婷婷久久综合 | 日韩国产精品一区 | 午夜精品久久久 | 国产视频观看 | 91在线影院 | 国产精品123 | 一区二区三区四区五区在线 | 久久国产视频网 | 蜜臀av性久久久久av蜜臀妖精 | 亚洲精品视频网站在线观看 | 久草视频在线免费 | 久久久久免费网 | 国内精品久久久 | 亚洲高清91 | 在线亚洲精品 | 国产成人av电影在线观看 | 国产精品久久久久久久av大片 | 国产精品久久久久免费a∨ 欧美一级性生活片 | av在线等| 国产精品欧美久久久久天天影视 | 激情久久影院 | 人人草在线观看 | 亚洲一区精品人人爽人人躁 | av免费在线观 | 黄色的视频 | 日韩久久久久久久 | 亚洲精品欧洲精品 | 亚洲精品小视频在线观看 | 天天爽夜夜爽人人爽一区二区 | 免费福利片 | 免费日韩电影 | 久久精品久久国产 | 伊人色综合久久天天网 | 国产福利av在线 | 亚洲丝袜一区二区 | 久久国产精品99久久人人澡 | 精品一区精品二区高清 | 91成人精品国产刺激国语对白 | jizz欧美性9 国产一区高清在线观看 | 日本不卡一区二区 | 深夜免费小视频 | 日韩毛片在线播放 | 国产视频久久久 | www欧美色| 欧美成人中文字幕 | 色婷婷久久久综合中文字幕 | 91麻豆网 | 午夜久操 | 人人爽人人爽人人片av | 中文字幕a∨在线乱码免费看 | 色婷婷亚洲综合 | 成人少妇影院yyyy | 成人小视频在线播放 | 国产亚洲视频中文字幕视频 | 国产精品久久电影观看 | 日日操天天操狠狠操 | 久久午夜色播影院免费高清 | 999成人精品 | 日本女人在线观看 | 国产伦理精品一区二区 | 西西4444www大胆无视频 | 国产色综合| adn—256中文在线观看 | 久久激情日本aⅴ | a在线观看国产 | 久久久久久久久久久影视 | 麻豆一区二区三区视频 | 国产精品一区二区av麻豆 | 91理论片午午伦夜理片久久 | 一区二区三区免费网站 | 久久精品牌麻豆国产大山 | 亚洲乱码国产乱码精品天美传媒 | 日本超碰在线 | 国产精品久久久久久一二三四五 | 亚洲激情五月 | 在线观看免费视频 | 久久狠狠干 | 久久伊人操 | 日韩电影中文 | 96在线 | 久草在线最新 | 91精品国产自产91精品 | 最近在线中文字幕 | 最新免费av在线 | 伊人网站 | 五月婷在线观看 | 成人免费看黄 | 香蕉视频导航 | 免费h漫在线观看 | 欧美极品一区二区三区 | 亚洲成人资源网 | 久久这里只有精品久久 |