Pandas 簡介
Pandas
Pandas 庫基于 NumPy 建構,為 Python 程式設計語言提供易于使用的資料結構和資料分析工具。
Pandas
使用以下約定導入 Pandas
import pandas as pd
複制
幫助
help(pd.Series.loc)
複制
Pandas 資料結構
序列(Series)
能夠儲存任何資料類型的一維标記數組
s = pd.Series([1, 3, 5, 7], index=['天', '地', '玄', '黃'])
複制
# 左側一列為索引
s
複制
天 1
地 3
玄 5
黃 7
dtype: int64
資料框(DataFrame)
不同類型列的二維标記資料結構,類似 Excel 表格
上面一行為列名
左側一列為索引
- | 姓 | 名 | 民族 | 姓别 | 年齡 |
---|---|---|---|---|---|
1 | 賈 | 小武 | 漢 | 男 | 3 |
2 | 賈 | 小久 | 漢 | 男 | 1 |
3 | 張 | 小鴨 | 漢 | 女 | - |
data = {'姓': ['賈', '賈', '張'],
'名': ['小武', '小久', '小鴨́'],
'民族': ['漢', '漢', '漢'],
'年齡': [3, 1, None]}
複制
data
複制
{'姓': ['賈', '賈', '張'],
'名': ['小武', '小久', '小鴨́'],
'民族': ['漢', '漢', '漢'],
'年齡': [3, 1, None]}
df = pd.DataFrame(data, columns=['姓', '名', '年齡'])
複制
df
複制
- | 姓 | 名 | 民族 | 姓别 | 年齡 |
---|---|---|---|---|---|
1 | 賈 | 小武 | 漢 | 男 | 3 |
2 | 賈 | 小久 | 漢 | 男 | 1 |
3 | 張 | 小鴨 | 漢 | 女 | - |
檔案 I / O
讀寫 CSV
pd.read_csv('file.csv', header=None, nrows=5)
df.to_csv('myDataFrame.csv')
複制
讀寫 Excel
pd.read_excel('file.xlsx')
pd.to_excel('dir/myDataFrame.xlsx', sheet_name='Sheet1')
xlsx = pd.ExcelFile('file.xls')
df = pd.read_excel(xlsx, 'Sheet1')
複制
讀取資料庫
from sqlalchemy import create_engine
engine = create_engine('sqlite:///:memory:')
pd.read_sql("SELECT * FROM my_table;", engine)
pd.read_sql_table('my_table', engine)
pd.read_sql_query("SELECT * FROM my_table;", engine)
複制
read_sql() 是 read_sql_table() 和 read_sql_query() 的便捷包裝器
pd.to_sql('myDf', engine)
複制
選擇
擷取
# 擷取 1 個資料
s['天']
複制
1
# 擷取 DataFrame 的子集
df[1:]
複制
選擇,布爾索引 & 設定
位置
按行和列選擇單個值
df.iloc[[0], [1]]
複制
df.iat[0, 1]
複制
'小武'
标簽
按行和列标簽選擇單個值
df.loc[0, '姓']
複制
'賈'
df.at[0, '姓']
複制
'賈'
布爾索引
s[~(s > 1)]
複制
天 1
dtype: int64
s[(s < -1) | (s > 2)]
複制
地 3
玄 5
黃 7
dtype: int64
df[df['年齡']>1]
複制
設定
将序列 s 的索引 '宇' 設定為 9
s['宇'] = 9
s
複制
天 1
地 3
玄 5
黃 7
宇 9
dtype: int64
删除(dropping)
從行中删除值(axis = 0)
s.drop(['天', '地'])
複制
玄 5
黃 7
宇 9
dtype: int64
從列中删除值(axis = 1)
df.drop('姓', axis=1)
複制
排序和排名
按軸标簽排序
df.sort_index()
複制
按軸的值排序
df.sort_values(by='年齡')
複制
從小到大排序的下标
df.rank()
複制
檢索 Series / DataFrame 資訊
基本資訊
df = pd.DataFrame([[1, 2], [4, 5], [7, 8]],
index=['cobra', 'viper', 'sidewinder'],
columns=['max_speed', 'shield'])
複制
(行,列)
df.shape
複制
(3, 2)
描述索引
df.index
複制
Index(['cobra', 'viper', 'sidewinder'], dtype='object')
描述 DataFrame 列資訊
df.columns
複制
Index(['max_speed', 'shield'], dtype='object')
DataFrame 資訊
df.info()
複制
非 NA 值的數量
df.count()
複制
max_speed 3
shield 3
dtype: int64
摘要
總和
df.sum()
複制
max_speed 12
shield 15
dtype: int64
累積值
df.cumsum()
複制
最小值
df.min()
複制
max_speed 1
shield 2
dtype: int64
最大值
df.max()
複制
max_speed 7
shield 8
dtype: int64
最小索引值
df.idxmin()
複制
max_speed cobra
shield cobra
dtype: object
最大索引值
df.idxmax()
複制
max_speed sidewinder
shield sidewinder
dtype: object
摘要統計
df.describe()
均值
```python
df.mean()
複制
max_speed 4.0
shield 5.0
dtype: float64
中位數
df.median()
複制
max_speed 4.0
shield 5.0
dtype: float64
應用函數
f = lambda x: x*2
複制
應用函數
df.apply(f)
複制
按元素應用函數
df.applymap(f)
複制
資料對齊
内部資料對齊
值 NA 在不重疊的索引中引入
s3 = pd.Series([7, -2, 3], index=['玄', '黃', '宇'])
複制
s + s3
複制
地 NaN
天 NaN
宇 12.0
玄 12.0
黃 5.0
dtype: float64
填充方法的算術運算
借助填充方法自行完成内部資料對齊
s.add(s3, fill_value=0)
複制
地 3.0
天 1.0
宇 12.0
玄 12.0
黃 5.0
dtype: float64
s.sub(s3, fill_value=2)
複制
地 1.0
天 -1.0
宇 6.0
玄 -2.0
黃 9.0
dtype: float64
s.div(s3, fill_value=4)
複制
地 0.750000
天 0.250000
宇 3.000000
玄 0.714286
黃 -3.500000
dtype: float64
s.mul(s3, fill_value=3)
複制
地 9.0
天 3.0
宇 27.0
玄 35.0
黃 -14.0
dtype: float64
ipynb 請檢視:https://github.com/iOSDevLog/AIDevLog/blob/master/Python%20%E5%9F%BA%E7%A1%80/PandasBasic.ipynb