Pandas作為Python最強大的表格處理工具,其操作上非常簡單、方便,也很彈性。所謂簡單,指初學寫程式的人也容易快速上手。所謂方便,指程式碼很短、很簡單,卻可以做非常繁複的工作。所謂彈性,指他在許多較高階的資料整理技術上都有支援,也與Python中常用套件配合的天衣無縫。因此,如果你對資料處理有興趣,而且希望透過Python進行實踐,那麼Pandas則是你的首要學習技術。
以下,今天的文章將講述各類型資料的格式與讀寫檔的方式,明天將細緻的介紹Pandas在資料呈現與整理方面的功能。
terminal
pip install pandas
pandas裡面總共兩個內建型別: DataFrame以及Seires。DataFrame是一張table,而其中Series就是一個column或是row的所有資料。以下將從檔案讀寫、DataFrame、Series的屬性以及方法已進行介紹。
以下會順便介紹一下各種檔案的格式,不過沒有打算介紹xml的檔案(比較早期的檔案格式)。將以這張表格為範例,呈現各種資料儲存格式下的樣子。
name | category_name | brand_name | price | shipping |
---|---|---|---|---|
MLB Cincinnati Reds T Shirt Size XL | Men/Tops/T-shirts | NaN | 10 | 1 |
Razer BlackWidow Chroma Keyboard | Electronics/Computers & Tablets/Components & P... | Razer | 52 | 0 |
AVA-VIV Blouse | Women/Tops & Blouses/Blouse | Target | 10 | 1 |
Leather Horse Statues | Home/Home Décor/Home Décor Accents | NaN | 35 | 1 |
24K GOLD plated rose | Women/Jewelry/Necklaces | NaN | 44 | 0 |
2.其檔案格式如下:
name,category_name,brand_name,price,shipping\n
MLB Cincinnati Reds T Shirt Size XL,Men/Tops/T-shirts,,10,1\n
Razer BlackWidow Chroma Keyboard,Electronics/Computers & Tablets/Components & P...,Razer,52,0\n
AVA-VIV Blouse,Women/Tops & Blouses/Blouse,Target,10,1\n
Leather Horse Statues,Home/Home Décor/Home Décor Accents,,35,1\n
24K GOLD plated rose,Women/Jewelry/Necklaces,,44,0\n
df = pd.read_csv("<file_path>")
[{'brand_name': nan,
'category_name': 'Men/Tops/T-shirts',
'name': 'MLB Cincinnati Reds T Shirt Size XL',
'price': 10,
'shipping': 1},
{'brand_name': 'Razer',
'category_name': 'Electronics/Computers & Tablets/Components & P...',
'name': 'Razer BlackWidow Chroma Keyboard',
'price': 52,
'shipping': 0},
{'brand_name': 'Target',
'category_name': 'Women/Tops & Blouses/Blouse',
'name': 'AVA-VIV Blouse',
'price': 10,
'shipping': 1},
{'brand_name': nan,
'category_name': 'Home/Home Décor/Home Décor Accents',
'name': 'Leather Horse Statues',
'price': 35,
'shipping': 1},
{'brand_name': nan,
'category_name': 'Women/Jewelry/Necklaces',
'name': '24K GOLD plated rose',
'price': 44,
'shipping': 0}]
df = pd.read_json("<file_path>")
<table>
<thead>
<tr>
<th>name</th>
<th>category_name</th>
<th>brand_name</th>
<th>price</th>
<th>shipping</th>
</tr>
</thead>
<tbody>
<tr>
<td>MLB Cincinnati Reds T Shirt Size XL</td>
<td>Men/Tops/T-shirts</td>
<td>NaN</td>
<td>10</td>
<td>1</td>
</tr>
<tr>
<td>Razer BlackWidow Chroma Keyboard</td>
<td>Electronics/Computers & Tablets/Components & P...</td>
<td>Razer</td>
<td>52</td>
<td>0</td>
</tr>
<tr>
<td>AVA-VIV Blouse</td>
<td>Women/Tops & Blouses/Blouse</td>
<td>Target</td>
<td>10</td>
<td>1</td>
</tr>
<tr>
<td>Leather Horse Statues</td>
<td>Home/Home Décor/Home Décor Accents</td>
<td>NaN</td>
<td>35</td>
<td>1</td>
</tr>
<tr>
<td>24K GOLD plated rose</td>
<td>Women/Jewelry/Necklaces</td>
<td>NaN</td>
<td>44</td>
<td>0</td>
</tr>
</tbody>
</table>
dfs = pd.read_html("<url or html text>")
code_string = """ {'brand_name': nan,
'category_name': 'Home/Home Décor/Home Décor Accents',
'name': 'Leather Horse Statues',
'price': 35,
'shipping': 1}"""
target_dict = eval(code_string)
df = pd.DataFrame(<dist_variable_name>")
# 寫成csv檔
df.to_csv('<file_path>', index=False, encoding='utf8') # index不寫上的話,很有可能下次讀檔近來他又幫你重建索引,所以一般我會習慣這樣寫,encoding則是因為中文版windows預設編碼回cp950(真的很討厭),有一些字彙無法透過這個編碼儲存,像是"喆"或是"Naïve"中間那個有兩個點的i。
# 寫成json檔
df.to_json('<file_path>', encoding='utf8')
#轉成python中的dist格式
list(df.T.to_dict().values())