---
# System prepended metadata

title: 資料D8~9：Pandas 物件的定義與屬性/建立
tags: [python, 資料科學馬拉松]

---

# 資料D8~9：Pandas 物件的定義與屬性/建立

https://pandas.pydata.org/

對於資料的操作調整的Python的函式庫

* 提供了快速高效的 DataFrame 結構（
* 廣泛地在學術傑與商業領域中使用
* 對於資料格式有高度的銜接性，包含 CSV、Excel 或資料庫（SQL）皆能提供彈性的讀寫工具

Numpy陣列：數學矩陣角度
Pandas：資料處理角度

import pandas as pd

## 主要架構： Series / DataFrame

![](https://i.imgur.com/Tz7mF5p.png)


### 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

![](https://i.imgur.com/57xALvh.png)

### 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名稱)
都會得到一樣結果

![](https://i.imgur.com/1pUvECv.png)

## DataFrame

pd.DataFrame(list1,list2....)
則會依著每個list是一列的方式呈現
,index=[....] 設定索引名稱
,column=[....] 設定欄位名稱
欄位可以只有一個

在jupyter裡面打
DataFrame名稱與print(DataFrame)
會得到不一樣結果，後者會美化

![](https://i.imgur.com/eBSBYbf.png)

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://i.imgur.com/OcVywwc.png)



其餘教學資料
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`