pandas指南-1.數據創建與讀寫

目錄

數據創建,讀寫指南

讀常用文件csv

讀常用文件excel

讀常用文件sqlite

如何寫入常用文件


數據創建,讀寫指南

任何數據分析項目的第一步都可能是從某個文件中讀取數據,因此我們需要首先考慮這一點。 在本節中,我們將介紹有關創建pandas Series和DataFrame對象的練習

官方pandas文檔的IO Tools部分提供了有關此主題的全面概述

首先我們來導入pandas庫

import pandas as pd

創建數據 pandas中有兩個核心對象:DataFrame和Series。

DataFrame是一個表。 它包含一系列單獨的條目,每個條目都有一定的值。 每個條目對應一行(或記錄)和一列。

例如,請考慮以下簡單的DataFrame:

pd.DataFrame({'Yes': [50, 21], 'No': [131, 2]})
在此示例中,“0,No”條目的值爲131.“0,Yes”條目的值爲50,依此類推。

DataFrame條目不限於整數。 例如,這是一個DataFrame,其值爲str字符串:

pd.DataFrame({'Bob': ['I liked it.', 'It was awful.'], 'Sue': ['Pretty good.', 'Bland.']})

我們使用pd.DataFrame構造函數來生成這些DataFrame對象。創建新對象的語法是初始化一個字典,其鍵是列名(本例中爲Bob和Sue),其值是條目列表。 這是構建新DataFrame的標準方法,也是你最容易遇到的方法。

字典列表的構造函數爲列標籤分配值,但只使用0(0,1,2,3,...)的遞增計數作爲行標籤。 有時候這沒關係,但我們經常會想要自己分配這些行標籤。

DataFrame中使用的行標籤列表稱爲索引。 我們可以在構造函數中使用索引參數爲其賦值

pd.DataFrame({'Bob': ['I liked it.', 'It was awful.'], 
              'Sue': ['Pretty good.', 'Bland.']},
             index=['Product A', 'Product B'])

相比之下,Series是一系列數據值。 如果DataFrame是表,則Series是列表。 事實上,你可以創建一個Series只有一個列表:

pd.Series([1, 2, 3, 4, 5])
0    1
1    2
2    3
3    4
4    5
dtype: int64

Series本質上是DataFrame的單個列。 因此,你可以使用索引參數以與之前相同的方式爲Series分配列值。 但是,Series沒有列名,它只有一個總名稱:

pd.Series([30, 35, 40], index=['2015 Sales', '2016 Sales', '2017 Sales'], name='Product A')
2015 Sales    30
2016 Sales    35
2017 Sales    40
Name: Product A, dtype: int64

Series和DataFrame密切相關。 將DataFrame視爲實際上只是一堆Series“粘合在一起”是有幫助的。 我們將在本教程的下一部分中看到更多內容。

讀常用文件csv

能夠手動創建DataFrame和Series非常方便。 但是,在大多數情況下,我們實際上不會手動創建自己的數據,我們將使用已經存在的數據。

數據可以以多種不同的形式和格式存儲。 到目前爲止,其中最基本的是簡單的CSV文件。 當你打開CSV文件時,會看到如下所示的內容:

Product A,Product B,Product C,

30,21,9,

35,34,1,

41,11,11

CSV文件是由逗號分隔的表

現在讓我們把我們的玩具數據集放在一邊,看看當我們將它讀入DataFrame時真正的數據集是什麼樣的。

在這個案例裏,我們將查看澳大利亞墨爾本的房價數據。點擊這裏 下載 數據集

我們將使用read_csv函數將數據讀入DataFrame。 這樣做:

melbourne_data = pd.read_csv('melb_data.csv') 

我們可以使用shape屬性來檢查生成的DataFrame的大小:

 

melbourne_data.shape
(13580, 21)

因此,我們的新DataFrame有1萬3千多條記錄,分爲21個不同的列。

我們可以使用head命令檢查結果DataFrame的內容,該命令抓取前五行:

melbourne_data.head()

pandas read_csv函數功能豐富,可以指定30多個可選參數。 例如,你可以在創建數據集時候使用csv文件某列作爲內置索引,而pandas默認不會自動獲取。 爲了使pandas將該列用於索引(而不是從頭開始創建新索引),我們可以指定並使用index_col。

melbourne_data = pd.read_csv('melb_data.csv', index_col=0)
melbourne_data.head()

讀常用文件excel

讓我們看看你可能會遇到的更多數據類型。

首先是古老的Excel電子表格。 Excel文件(XLS或XLST)將自身組織爲一系列命名工作表。 每張Sheet基本上都是一張表格。 因此,要將數據加載到pandas中,我們需要一個額外的參數:感興趣的工作表的名稱。

點擊這裏 下載 數據集

本地打開如下

my picture

用pandas的read_excel讀取:

wic = pd.read_excel("WICAgencies2013ytd.xls", 
                    sheet_name='Total Women')
wic.head()

正如你在此示例中所看到的,Excel文件通常不像CSV文件那樣格式化。電子表格允許(並鼓勵)創建人類可讀但不是機器可讀的註釋和字段。

所以在我們使用這個特定的數據集之前,我們需要稍微清理一下。我們將在下一節中看到如何執行此操作。

讀常用文件sqlite

現在,讓我們轉到另一種常見的數據格式:sqlite。

點擊這裏 下載 sqlite數據集

連接到SQL數據庫需要比從Excel文件讀取更多的思考。首先,你需要創建一個連接器

pandas不會自動爲你執行此操作,因爲有許多不同類型的SQL數據庫,每個都有自己的連接器。因此,對於SQLite數據庫,你需要首先執行以下操作(使用Python附帶的sqlite3庫):

import sqlite3
conn = sqlite3.connect("Salaries.sqlite")

你需要做的另一件事是編寫SQL語句。 在內部,SQL數據庫的運行方式完全不同。 但是,在外部,它們都提供相同的API,即“結構化查詢語言”(或簡稱SQL ...)。

所以,不用多說,以下是從SQLite中查看數據庫裏有多少表格

tables = pd.read_sql_query("SELECT * FROM sqlite_master where type='table'", conn)
tables

salaries = pd.read_sql_query("SELECT * FROM Salaries", conn)
conn.close() 
salaries.head()

如何寫入常用文件

將數據寫入文件通常比從一個文件中讀取數據更容易,因爲pandas會爲你處理轉換的麻煩。

我們將再次使用CSV文件。 read_csv(讀取我們的數據)的反義詞是to_csv,寫入它。 使用CSV文件很簡單:

melbourne_data.head().to_csv('melb_data_head.csv')

要寫回Excel文件,需要再次使用to_excel和sheet_name:

wic.head().to_excel('wic_head.xls', sheet_name='Total Women')

最後,要寫入到SQLite數據庫,我們要將數據輸入的數據庫中提供表的名稱,以及連接器:

conn = sqlite3.connect("salaries_head.sqlite")
salaries.head().to_sql("salaries", conn)
conn.close()

無痛完成讀寫!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章