AI - MLCC - 04 - 使用TF的基本步驟02 - Pandas 簡介
阿新 • • 發佈:2019-01-13
原文連結:https://colab.research.google.com/notebooks/mlcc/intro_to_pandas.ipynb
1- Pandas
- HomePage : http://pandas.pydata.org/
- Docs : http://pandas.pydata.org/pandas-docs/stable/index.html
- 針對Python語言的開源資料分析處理工具,可以提供高效能、易用的資料結構;
主要資料結構
- DataFrame: 資料框架是用於資料操控的一種常用抽象實現形式,可以理解為一個關係型資料表格,其中包含多個行和已命名的列。
- Series: 單一列。DataFrame 中包含一個或多個 Series,每個 Series 均有一個名稱。
2- 示例講解
原始碼檔案:https://github.com/anliven/Hello-Data/tree/master/Pandas
# coding=utf-8 import pandas as pd import matplotlib.pyplot as plt import numpy as np print("version: ", pd.__version__) # ### 顯示設定 # 預設情況下,如果DataFrame的行列數量太多,print將只顯示部分內容 pd.set_option('display.max_columns', None) # 顯示所有列 pd.set_option('display.max_rows', None) # 顯示所有行 pd.set_option('max_colwidth', 100) # 設定value的顯示長度為100,預設為50 # ### 基本概念 city_names = pd.Series(['San Francisco', 'San Jose', 'Sacramento']) # 構建Series物件 population = pd.Series([852469, 1015785, 485199]) # 構建Series物件 maps = pd.DataFrame({'City name': city_names, 'Population': population}) # 建立DataFrame物件 print("DataFrame: ", "\n", maps) # 如果Series在長度上不一致,系統會用特殊的NA/NaN值填充缺失的值 california_housing_dataframe = pd.read_csv("Zcalifornia_housing_train.csv", sep=",") # 將整個檔案載入到DataFrame info = california_housing_dataframe.describe() # 使用DataFrame.describe來顯示關於DataFrame的統計資訊 print(info) info_head = california_housing_dataframe.head() # 顯示DataFrame的前幾個記錄 print(info_head) hist = california_housing_dataframe.hist('housing_median_age') # 繪製圖表:使用DataFrame.hist快速瞭解一個列中值的分佈 print(hist) plt.show() # 顯示圖表 # ### 訪問資料 # 以Python的dict/list方式訪問DataFrame資料 # 文件: http://pandas.pydata.org/pandas-docs/stable/indexing.html cities = pd.DataFrame({'City name': city_names, 'Population': population}) print(type(cities['City name']), type(cities[0:2]), type(cities['City name'][1])) print(cities) print(cities['City name']) print(cities[0:2]) print(cities['City name'][1]) # ### 操控資料 print(population / 1000) # 可以向Series應用Python的基本運算指令 print(np.log(population)) # Series物件可用作大多數NumPy函式的引數 print(population.apply(lambda val: val > 1000000)) # 建立一個population是否超過100萬的新Series物件 # 使用Series.apply進行復雜的單列轉換,Series.apply將以引數形式接受 lambda 函式,而該函式會應用於每個值 cities['Area square miles'] = pd.Series([46.87, 176.53, 97.92]) # 向現有DataFrame新增Series cities['Population density'] = cities['Population'] / cities['Area square miles'] # 新增Series cities['wide_saint'] = (cities['Area square miles'] > 50) \ & cities['City name'].apply(lambda name: name.startswith('San')) # 新增Series # 注意:布林值Series是使用“按位”而非傳統布林值“運算子”組合的,因此執行邏輯與時,應使用&,而不是and print(cities) # ### 索引 # 文件:http://pandas.pydata.org/pandas-docs/stable/indexing.html#index-objects # Series和DataFrame物件定義了index屬性,該屬性會向每個Series項或DataFrame行賦一個識別符號值 # 預設情況下,在構造時,pandas會賦可反映源資料順序的索引值 # 索引值在建立後是穩定的,不會因為資料重新排序而發生改變 print(city_names.index) print(cities.index) # reindex方法 # 文件:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.reindex.html print(cities.reindex([2, 0, 1])) # 呼叫DataFrame.reindex來手動重新排列各行的順序 cities.reindex(np.random.permutation(cities.index)) # 將cities.index傳遞至NumPy的random.permutation函式,隨機排列其值的位置 print(cities) # reindex方法允許使用未包含在原始DataFrame索引值中的索引值,reindex會為此類“丟失的”索引新增新行,並在所有對應列中填充NaN值 print(cities.reindex([0, 4, 5, 2]))