數據讀取是第一步,只有成功載入數據之後,後續的操作才有可能。 pandas可以讀取和導入各種數據格式的數據,如CSV,Excel,JSON,SQL,HTML等,不需要手動編寫複雜的讀取代碼。 1. 各類數據源 pandas提供了導入各類常用文件格式數據的介面,這裡介紹3種最常用的載入數據的介面。 1 ...
數據讀取是第一步,只有成功載入數據之後,後續的操作才有可能。
pandas
可以讀取和導入各種數據格式的數據,如CSV,Excel,JSON,SQL,HTML等,不需要手動編寫複雜的讀取代碼。
1. 各類數據源
pandas
提供了導入各類常用文件格式數據的介面,這裡介紹3種最常用的載入數據的介面。
1.1 從 CSV 文件讀取數據
讀取csv文件的介面:read_csv
()
import pandas as pd
# 此csv中包含一些中國人口的統計信息
df = pd.read_csv("/path/to/china-population.csv")
df.head() # 顯示前5條數據
1.2 從 excel 文件讀取數據
讀取excel文件的介面:read_excel
()
讀取excel文件時,預設讀取第一個sheet中的數據。
import pandas as pd
# 此excel中的數據與上面csv文件中的一樣
df = pd.read_excel("/path/to/china-population.xlsx")
df.head() # 顯示前5條數據
1.3 從網路中讀取數據
除了從本地文件中讀取數據之外,read_csv
和 read_excel
也可以直接從URL讀取數據。
比如,上面的csv文件和excel文件可以從下麵的地址下載。
http://databook.top:8888/pandas/china-population.csv
http://databook.top:8888/pandas/china-population.xlsx
可以直接將URL傳給 read_csv
和 read_excel
,不用下載保存本地。
import pandas as pd
df = pd.read_csv("http://databook.top:8888/pandas/china-population.csv")
df_excel = pd.read_excel("http://databook.top:8888/pandas/china-population.xlsx")
2. 不同分隔符
csv 文件中預設用逗號,
分隔不同的欄位,不過,也有很多csv文件不用逗號分隔,用其他生僻的符號來分隔。
import pandas as pd
df = pd.read_csv("http://databook.top:8888/pandas/china-population-sep.csv")
df.head()
文件china-population-sep.csv
用 |
來分隔不同的欄位,直接讀取的話,變成只有一個欄位。
這時,要明確設置分隔符。
import pandas as pd
df = pd.read_csv("http://databook.top:8888/pandas/china-population-sep.csv", sep="|")
df.head()
這樣就得到了正確的數據結構。
3. 設置列名稱
除了可以設置分隔符之外,讀取數據時,也可以設置列的名稱。
上面的例子中,列的名稱都是字母的縮寫,讀取文件時可以替換成中文名稱。
import pandas as pd
df = pd.read_csv(
"http://databook.top:8888/pandas/china-population-sep.csv",
sep="|",
names=["年份數字", "年份", "指標編碼", "指標名稱", "人口數"],
)
df.head()
通過names
參數設置列的名稱,names
參數是個列表,其中元素的個數一般與列的數目保持一致。
如果names
中元素個數少於列的數目,那麼多出來的列會作為索引(關於索引index,後續會詳細介紹)。
import pandas as pd
df = pd.read_csv(
"http://databook.top:8888/pandas/china-population-sep.csv",
sep="|",
names=["指標編碼", "指標名稱", "人口數"],
)
df.head()
如果 names
中元素個數多於列的數目,多出來的元素作為新增的空白列。
import pandas as pd
df = pd.read_csv(
"http://databook.top:8888/pandas/china-population-sep.csv",
sep="|",
names=["年份數字", "年份", "指標編碼", "指標名稱", "人口數", "列名稱", "列名稱2"],
)
df.head()
上面的例子中,我們應該發現了一個問題,設置 names
作為新的列名稱之後,原有的列名稱被當成了實際的數據。
也就是:
設置新的列名稱時,如果數據中包含列名稱的話,需要忽略掉這個名稱。
設置 header=0
,忽略作為標題的第一行。
如果文件本來就沒有標題的話,設置 header=None
。
import pandas as pd
df = pd.read_csv(
"http://databook.top:8888/pandas/china-population-sep.csv",
sep="|",
header=0,
names=["年份數字", "年份", "指標編碼", "指標名稱", "人口數"],
)
df.head()
4. 隨機生成數據
pandas
支持從很多數據源讀取數據,不過,有時候我們只想嘗試嘗試 pandas
中的一些方法,並不想創建數據源。
這時,可以通過 numpy
包創建一個隨機的二維矩陣,直接將這個二維矩陣的數據導入 pandas
即可。
下麵的例子創建了一個10行3列的數據集。
import pandas as pd
import numpy as np
data = np.random.rand(10,3)
df = pd.DataFrame(data, columns=["data1", "data2", "data3"])
df.head()
通過臨時創建的隨機數據,可以嘗試 pandas
提供的各類介面。
5. 總結回顧
本篇了主要介紹了數據的讀取方法,重點介紹的是 csv 文件的讀取方式,因為這是最常用的數據源。
其他數據源的讀取方式也大同小異,各種數據源的差異會體現在不同介面的參數上。
本文所用到的數據:
- http://databook.top:8888/pandas/china-population.csv
- http://databook.top:8888/pandas/china-population-sep.csv
- http://databook.top:8888/pandas/china-population.xlsx
本文關聯的微信視頻號短視頻: