# 資料D8~9:Pandas 物件的定義與屬性/建立
https://pandas.pydata.org/
對於資料的操作調整的Python的函式庫
* 提供了快速高效的 DataFrame 結構(
* 廣泛地在學術傑與商業領域中使用
* 對於資料格式有高度的銜接性,包含 CSV、Excel 或資料庫(SQL)皆能提供彈性的讀寫工具
Numpy陣列:數學矩陣角度
Pandas:資料處理角度
import pandas as pd
## 主要架構: Series / DataFrame

### Series及其屬性
Series: 索引+一欄資料(一個欄位)
可直接用欄位內容建立
```
s = pd.Series([1, 2, 3])
print(type(s)) # <class 'pandas.core.series.Series'>
print(s.shape) # (3, )
print(s.size) # 3
print(s.dtype) # int64
```
### DataFrame及其屬性
DataFrame: 索引+多欄資料(多個欄位共用同一個索引)
(很多共用索引的series構成)
(以下為只有一欄的DataFrame)
```
df = pd.DataFrame([1, 2, 3])
print(type(df)) # <class 'pandas.core.frame.DataFrame'>
print(df.shape) # (3, 1)
print(df.size) # 3
print(df.dtypes)
# 0 int64
# dtype: object
```
df.shape (列數,行數)
df.size 總資料數
df.values 用list的形式將每列資料列出(list內的有list)
df.index 列出index形式但不會直接列出,如RangeIndex(start=0, stop=10, step=1) 或
Index(['A', 'B', 'C'], dtype='object'
df.colums 用list形式列出所有欄位名稱但不會直接列出,如
Index(['A', 'B', 'C'], dtype='object'
df.dtypes 會列出各欄位的type
type(df) <class 'pandas.core.frame.DataFrame'>
len(df) 列數
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html

### DataFrame的查看
DataFrame名稱.head(n) 列出前n列,不輸入則為5
DataFrame名稱.tail(n) 列出後n列,不輸入則為5
DataFrame名稱.describe() 列出各欄位的基本統計資訊
DataFrame名稱.info() 列出各欄位型態以及記憶體等資訊
## DataFrame建立
### Series
pd.series([... ... ...])
pd.series(list物件)
若要設定index(每列的名稱)則在後方加入
,index=[....] 內容的數量必須等於list物件內容的數量
(裡面可以是任何型態的資料)
Series無法設定colunm名稱
在jupyter裡面打
series名稱或print(series名稱)
都會得到一樣結果

## DataFrame
pd.DataFrame(list1,list2....)
則會依著每個list是一列的方式呈現
,index=[....] 設定索引名稱
,column=[....] 設定欄位名稱
欄位可以只有一個
在jupyter裡面打
DataFrame名稱與print(DataFrame)
會得到不一樣結果,後者會美化

DataFrame名稱["欄位名稱"] 可叫出該series
## 由list/dic混合資料建立
pandas可以彈性轉換,可以直接試試看再調整
```
import pandas as pd
df = pd.DataFrame({
'Name': ['Alice', 'Bob'],
'Age': [18, 20],
})
print(df)
# Name Age
# 0 Alice 18
# 1 Bob 20
```
```
df = pd.DataFrame([
{'Name': 'Alice', 'Age': 18},
{'Name': 'Bob', 'Age': 20}
])
print(df)
# Name Age
# 0 Alice 18
# 1 Bob 20
```

其餘教學資料
https://oranwind.org/python-pandas-ji-chu-jiao-xue/
https://www.geeksforgeeks.org/creating-a-pandas-dataframe/
** 若要遍搜某個series的特定值(重複的不管),可用
`for i in set(df[column])`
搭配
df[df[column]==i]表示撈出是i的列
後面再加[column2]叫出另一欄的值
###### tags: `資料科學馬拉松` `python`