1. 程式人生 > >AI - MLCC - 04 - 使用TF的基本步驟02 - Pandas 簡介

AI - MLCC - 04 - 使用TF的基本步驟02 - Pandas 簡介

原文連結:https://colab.research.google.com/notebooks/mlcc/intro_to_pandas.ipynb

1- Pandas


主要資料結構

  • 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]))