約定:
import pandas as pd
讀取CSV檔案
csv檔案以.csv字尾結尾,預設用’,’作為分隔符,pandas提供了pd.read_csv()函數供我們讀取csv檔案:
pd.read_csv(filepath_or_buffer, sep=’,’, delimiter=None, header=’infer’, names=None, index_col=None, usecols=None, squeeze=False, converters=None, true_values=None, false_values=None, skiprows=None, nrows=None, na_values=None)
常用參數解釋:
filepath_or_buffer:檔案名、檔案具體或相對路徑、檔案對象
usecols:保留指定列
sep、delimiter:倆者均為檔案分割符号,或為正規表達式
header:當檔案中無列名需将其設為None
names:結合header=None,讀取時傳入列名
skiprows:忽略特定的行數
nrows:讀取一定行數
na_values:一組将其值轉換為NaN的特定值
sueeze:傳回Series對象
1 保留指定列
pd.read_csv('test.csv',usecols=[,])
代碼結果:
k1 | values1 | |
---|---|---|
a | 1 | |
1 | a | 8 |
2 | b | 3 |
3 | c | 2 |
2 讀取無列名的csv檔案
若csv檔案沒有列名,則需要自行輸入列名,否則Pandas會自動添加列名。
pd.read_csv('test2.csv',header=None,names=['k1','k2','value1','value2'])
代碼結果:
k1 | k2 | value1 | value2 | |
---|---|---|---|---|
a | x | 1 | 2 | |
1 | a | y | 8 | 3 |
2 | b | y | 3 | 3 |
3 | c | z | 2 | 9 |
3 讀入時指定列為索引
像上述讀入時,會自動添加索引:1,2,3,…,當檔案中包含索引字段,則可以讀入時指定特定列為索引。
- 指定單索引
pd.read_csv('test.csv',index_col='k1')
代碼結果:
k2 | values1 | values2 | |
---|---|---|---|
k1 | |||
a | x | 1 | 2 |
a | y | 8 | 3 |
b | y | 3 | 3 |
c | z | 2 | 9 |
- 指定階層化索引
pd.read_csv('test.csv',index_col=['k1','k2'])
代碼結果:
values1 | values2 | ||
---|---|---|---|
k1 | k2 | ||
a | x | 1 | 2 |
y | 8 | 3 | |
b | y | 3 | 3 |
c | z | 2 | 9 |
4 忽略特定行數
需要注意的是,檔案的第一行若為列名,則也有可能被忽略
- 傳入數值從特定行開始讀取
pd.read_csv('test2.csv',header=None,names=['k1','k2','value1','value2'],skiprows=)
代碼結果:
k1 | k2 | value1 | value2 | |
---|---|---|---|---|
a | y | 8 | 3 | |
1 | b | y | 3 | 3 |
2 | c | z | 2 | 9 |
- 傳入清單忽略指定行
pd.read_csv('test.csv',skiprows=[,])
代碼結果:
k1 | k2 | values1 | values2 | |
---|---|---|---|---|
a | y | 8 | 3 | |
1 | c | z | 2 | 9 |
5 讀取一定行數
pd.read_csv('test.csv',nrows=)
代碼結果:
k1 | k2 | values1 | values2 | |
---|---|---|---|---|
a | x | 1 | 2 | |
1 | a | y | 8 | 3 |
2 | b | y | 3 | 3 |
6 讀入時将特定值設為NaN
檔案中的空值因人而異,可能會是空,或者NaN,NA,IND等,pandas則有可能了解不了,這時則需要我們指定NaN标定值
pd.read_csv('test3.csv')
代碼結果:
k1 | k2 | values1 | values2 | |
---|---|---|---|---|
a | x | 1 | NaN | |
1 | a | y | NaN | 3.0 |
2 | b | y | 3 | NaN |
3 | c | z | IND | 9.0 |
- 清單傳入特定值
pd.read_csv('test3.csv',na_values=['IND'])
代碼結果:
k1 | k2 | values1 | values2 | |
---|---|---|---|---|
a | x | 1.0 | NaN | |
1 | a | y | NaN | 3.0 |
2 | b | y | 3.0 | NaN |
3 | c | z | NaN | 9.0 |
- 使用字典為不同列指定NaN标記值
pd.read_csv('test3.csv',na_values={'value1':['IND'],'k1':['b','c']})
代碼結果:
k1 | k2 | values1 | values2 | |
---|---|---|---|---|
a | x | 1 | NaN | |
1 | a | y | NaN | 3.0 |
2 | NaN | y | 3 | NaN |
3 | NaN | z | IND | 9.0 |
7 傳回Series對象
當處理後的結果隻保留一列,但讀取後的結果是為DataFrame對象,讓squeeze=True則傳回Series對象。
print(type(pd.read_csv('test.csv',usecols=['k1'])))
print(type(pd.read_csv('test.csv',usecols=['k1'],squeeze=True)))
代碼結果:
<class 'pandas.core.frame.DataFrame'>
<class 'pandas.core.series.Series'>
讀取Excel檔案
Excel檔案比csv特别的是excel可以有多個Sheet表格,當Excel檔案隻有單個Sheet表格時,用pd.read_excel()、pd.read_table()、甚至pd.read_csv()都可以,指定分隔符即可,當有多個Sheet表格時用pd.read_excel()更加靈活。
pd.read_excel(io, sheet_name=0, header=0, skiprows=None, skip_footer=0, index_col=None, names=None, usecols=None, parse_dates=False, date_parser=None, na_values=None, thousands=None, convert_float=True, converters=None, dtype=None, true_values=None, false_values=None, engine=None, squeeze=False, **kwds)
常用參數解釋:
filepath_or_buffer:檔案名、檔案具體或相對路徑、檔案流(open()函數打開等)
usecols:保留指定列
sep、delimiter:倆者均為檔案分割符号,或為正規表達式
header:當檔案中無列名需将其設為None
names:結合header=None,讀取時傳入列名
skiprows:忽略特定的行數
nrows:讀取一定行數
na_values:一組将其值轉換為NaN的特定值
sueeze:傳回Series對象
sheet_name:選擇excel檔案中的sheet表格,可為數值或string
這些參數的用法和pd.read_csv的參數用法一樣,故不再詳細介紹了。
1 讀取第一個Sheet表格
sheet_name預設為0
pd.read_excel('test4.xlsx')
代碼結果:
k1 | k2 | values1 | values2 | |
---|---|---|---|---|
a | x | 1 | 2 | |
1 | a | y | 8 | 3 |
2 | b | y | 3 | 3 |
3 | c | z | 2 | 9 |
2 讀取指定Sheet表格
sheet_name可指定Sheet表格,可以是Sheetname或者Sheet的編号(從0開始)
pd.read_excel('test4.xlsx',sheet_name=,header=None,names=['k1','k2','value1','value2'])
#pd.read_excel('test4.xlsx',sheet_name='Sheet2',header=None,names=['k1','k2','value1','value2'])
代碼結果:
k1 | k2 | value1 | value2 | |
---|---|---|---|---|
a | x | 1 | 2 | |
1 | a | y | 8 | 3 |
2 | b | y | 3 | 3 |
3 | c | z | 2 | 9 |
總結
read_csv/read_excel/read_table 這三個讀取檔案函數将會是我們最常用的函數,read_csv和read_table差不多一樣,不同的是前者sep=’,’,後者sep=’\t’。取csv用read_csv即可,讀取txt/json等等則可用read_table,讀取時指定sep即可。讀取excel檔案使用read_excel則為最好。
謝謝大家的浏覽,
希望我的努力能幫助到您,
共勉!