iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 10
0
AI & Machine Learning

玩轉資料與機器學習-以自然語言處理為例系列 第 10

Pandas(Python中的Excel)Day1-資料類型與讀寫檔案

  • 分享至 

  • xImage
  •  

前言

Pandas作為Python最強大的表格處理工具,其操作上非常簡單、方便,也很彈性。所謂簡單,指初學寫程式的人也容易快速上手。所謂方便,指程式碼很短、很簡單,卻可以做非常繁複的工作。所謂彈性,指他在許多較高階的資料整理技術上都有支援,也與Python中常用套件配合的天衣無縫。因此,如果你對資料處理有興趣,而且希望透過Python進行實踐,那麼Pandas則是你的首要學習技術。
以下,今天的文章將講述各類型資料的格式與讀寫檔的方式,明天將細緻的介紹Pandas在資料呈現與整理方面的功能。

Pandas的安裝

terminal

pip install pandas

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

csv 檔

  1. 簡介: csv應該滿常見的,excel其實是可以操作csv檔的,檔案的讀寫都沒有問題。其檔案格式主要是透過","進行分隔(csv中的c就是comma的意思,另外tsv檔則是用tab(\t)進行分隔),"\n"進行換行,第一行是column headers。如果你真的想知道內部的儲存格式,你就透過最陽春的文字編輯器(記事本)打開看看,就可以了解了。

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
  1. pandas的讀檔方式如下:
df = pd.read_csv("<file_path>")

json 檔

  1. 簡介: json檔是現在檔案傳輸的主要格式,既是網路上溝通(Restful API)最主要的格式,也是非關聯是資料庫主要的資料儲存格式,由於程式語言與程式語言之間或是網際網路之間要交換資料都存在一定程度的障礙,因此必須訂定一個統一的格式,讓資料交換可以變得更順利。早期定義出來的格式稱作xml,不過因為xml實在不是對人類很友善,因此近期比較常見的格式稱作json。
  2. 其檔案格式如下:
[{'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}]
  1. pandas的讀檔方式如下:
df = pd.read_json("<file_path>")

html table

  1. 簡介: 必須注意回傳的是一個由很多DataFrame組成的list,因為一般html檔中可能會出現很多個table。
  2. 其檔案格式如下:
<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>
  1. pandas的讀檔方式如下:
dfs = pd.read_html("<url or html text>")

dist

  1. 簡介: 其實,這就是json在python中的型別,因此就不多示範了。不過必須注意的是,如果你希望一段以變數型態儲存的純文字,進入python讓python讀成內部程式碼,那麼你可以使用eval這個方法。
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)
  1. pandas的讀檔方式如下:
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())

上一篇
Python與MongoDB的互動
下一篇
周末特別節目-iThome鐵人文章分析
系列文
玩轉資料與機器學習-以自然語言處理為例31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言