第3節 數據讀取與預覽
讀取excel文件丨pandas.read_excel() 丨 ★★★★★
Python中讀取數據最常用工具包:pandas。語法:pandas.read_excel()
pandas.read_excel(io, sheet_name=0, header=0, names=None, index_col=None, usecols=None, squeeze=False, dtype=None, engine=None, converters=None, true_values=None, false_values=None, skiprows=None, nrows=None, na_values=None, keep_default_na=True, verbose=False, parse_dates=False, date_parser=None, thousands=None, comment=None, skip_footer=0, skipfooter=0, convert_float=True, mangle_dupe_cols=True, **kwds)
常用參數:
- io:excel的路徑
- sheet_name:工作表的名稱。當不輸入sheet_name參數時,默認讀取第一個工作表
不常用參數:
- index_col :指定某一列爲索引。index_col=1
- names :列名稱,傳入list數據
- parse_dates :指定某列爲日期格式
- header:指定行作爲列名,默認爲第1行。header=[1,2]多級索引
- skiprows:省略指定行的數據
- skip_footer:省略倒數n行數據
- usecols:讀取指定列。usecols = [“A”,“B”]
- nrows:導入的最大行。nrows=1000
- converters: 設置數據類型。converters = {‘Var1’: str, ‘Var2’: float}
讀取數據
# 導入工具包
import pandas as pd # 導入pandas,並簡寫成pd
import numpy as np # 導入numpy,並簡寫成np
方法1:文件完整路徑+文件名稱+文件後綴
# 讀取桌面data文件夾下面的excel文件
df1 = pd.read_excel('C:/Users/users/Desktop/Python課件/課件編寫/data/p3_讀取excel數據.xlsx')
df1
設備編號 | 型號 | 標準 | 經度 | 緯度 | 創建日期 | |
---|---|---|---|---|---|---|
0 | A21116B82 | 160T | 300000 | NaN | NaN | 2019-10-01 |
1 | A21116B83 | 315T | 500000 | 120.071235 | 36.083450 | 2019-10-02 |
2 | A41116B80 | 200T | 500000 | 120.071205 | 36.083442 | 2019-10-03 |
3 | A41114B31 | 200T | 500000 | 114.042518 | 30.447551 | 2019-10-04 |
4 | A21116B82 | 160T | 300000 | 106.655982 | 29.632772 | 2019-10-05 |
方法2: 先指定文件路徑
# 導入os工具包,設置默認路徑
import os
os.chdir('C:/Users/users/Desktop/Python課件/課件編寫/data/')
df2 = pd.read_excel('p3_讀取excel數據.xlsx')
df2
# 注意:當需要再讀取其他數據時,若路徑不一致,需要寫完整路徑
設備編號 | 型號 | 標準 | 經度 | 緯度 | 創建日期 | |
---|---|---|---|---|---|---|
0 | A21116B82 | 160T | 300000 | NaN | NaN | 2019-10-01 |
1 | A21116B83 | 315T | 500000 | 120.071235 | 36.083450 | 2019-10-02 |
2 | A41116B80 | 200T | 500000 | 120.071205 | 36.083442 | 2019-10-03 |
3 | A41114B31 | 200T | 500000 | 114.042518 | 30.447551 | 2019-10-04 |
4 | A21116B82 | 160T | 300000 | 106.655982 | 29.632772 | 2019-10-05 |
常用參數設置
sheet_name參數 : 指定讀取的工作表,默認第1個。
可不用寫
df3 = pd.read_excel('p3_讀取excel數據.xlsx',sheet_name='數據')
df3_1 = pd.read_excel('p3_讀取excel數據.xlsx','數據')
# ※注意:當sheet_name拼寫錯誤時,有時不會報錯 。比如 shet_name
df3
設備編號 | 型號 | 標準 | 經度 | 緯度 | |
---|---|---|---|---|---|
0 | B21116B82 | 160T | 300000 | NaN | NaN |
1 | B21116B83 | 315T | 500000 | 120.071235 | 36.083450 |
2 | B41116B80 | 200T | 500000 | 120.071205 | 36.083442 |
3 | B41114B31 | 200T | 500000 | 114.042518 | 30.447551 |
4 | B21116B82 | 160T | 300000 | 106.655982 | 29.632772 |
index_col參數 :指定某一列爲索引。
- 可用df.set_index()替代
- 可用變量名或者變量序號
# 設置設備編號列爲索引
df4 = pd.read_excel('p3_讀取excel數據.xlsx',index_col='設備編號')
df4
型號 | 標準 | 經度 | 緯度 | 創建日期 | |
---|---|---|---|---|---|
設備編號 | |||||
A21116B82 | 160T | 300000 | NaN | NaN | 2019-10-01 |
A21116B83 | 315T | 500000 | 120.071235 | 36.083450 | 2019-10-02 |
A41116B80 | 200T | 500000 | 120.071205 | 36.083442 | 2019-10-03 |
A41114B31 | 200T | 500000 | 114.042518 | 30.447551 | 2019-10-04 |
A21116B82 | 160T | 300000 | 106.655982 | 29.632772 | 2019-10-05 |
# 設置第1列爲索引
df4 = pd.read_excel('p3_讀取excel數據.xlsx',index_col=0)
df4
型號 | 標準 | 經度 | 緯度 | 創建日期 | |
---|---|---|---|---|---|
設備編號 | |||||
A21116B82 | 160T | 300000 | NaN | NaN | 2019-10-01 |
A21116B83 | 315T | 500000 | 120.071235 | 36.083450 | 2019-10-02 |
A41116B80 | 200T | 500000 | 120.071205 | 36.083442 | 2019-10-03 |
A41114B31 | 200T | 500000 | 114.042518 | 30.447551 | 2019-10-04 |
A21116B82 | 160T | 300000 | 106.655982 | 29.632772 | 2019-10-05 |
names參數 :指定列名(修改列的名稱)。
- 可用df.rename()替代
df5 = pd.read_excel('p3_讀取excel數據.xlsx',names=['變量1','變量2','變量3','變量4','變量5','變量6'])
# ※注意:參數寫成name也不報錯,但變量名稱並不會改
df5.dtypes
變量1 object
變量2 object
變量3 int64
變量4 float64
變量5 float64
變量6 datetime64[ns]
dtype: object
usecols參數 : 讀取指定列。
- 可用df[[‘變量1’,‘變量2’]]替代
df8 = pd.read_excel('p3_讀取excel數據.xlsx',usecols='b:d') # 字母大寫也可以
df9 = pd.read_excel('p3_讀取excel數據.xlsx',usecols=['型號','經度'])
df10 = pd.read_excel('p3_讀取excel數據.xlsx',usecols=['型號','標準','經度'])
# 錯誤寫法
#df11 = pd.read_excel('讀取excel數據.xlsx',usecols=['型號':'經度'])
df11 = pd.read_excel('p3_讀取excel數據.xlsx')[['型號','標準','經度']] # 雙括號
parse_dates參數 : 指定某列爲日期格式。可用pd.to_datetime()替代
df12 = pd.read_excel('p3_讀取excel數據.xlsx',parse_dates=['創建日期'])
# 注意:不能寫成 parse_dates = '創建日期'
df12.dtypes
設備編號 object
型號 object
標準 int64
經度 float64
緯度 float64
創建日期 datetime64[ns]
dtype: object
讀取多個工作表中數據
# 代碼1
df1 = pd.read_excel('p3_讀取excel數據.xlsx',sheet_name='Sheet1')
df2 = pd.read_excel('p3_讀取excel數據.xlsx',sheet_name='Sheet2')
print(df1)
print(df2)
設備編號 型號 標準 經度 緯度 創建日期
0 A21116B82 160T 300000 NaN NaN 2019-10-01
1 A21116B83 315T 500000 120.071235 36.083450 2019-10-02
2 A41116B80 200T 500000 120.071205 36.083442 2019-10-03
3 A41114B31 200T 500000 114.042518 30.447551 2019-10-04
4 A21116B82 160T 300000 106.655982 29.632772 2019-10-05
設備編號
0 C21116C82
1 C21116C82
2 C41116C80
3 C41114C31
4 C21116C82
# 代碼2
with pd.ExcelFile('p3_讀取excel數據.xlsx') as xls:
df1 = pd.read_excel(xls, 'Sheet1')
df2 = pd.read_excel(xls, 'Sheet2')
讀取csv或者txt文件丨pandas.read_csv() 丨 ★★★★★
pandas.read_csv(filepath_or_buffer: Union[str, pathlib.Path, IO[~AnyStr]], sep=’,’, delimiter=None, header=‘infer’, names=None, index_col=None, usecols=None, squeeze=False, prefix=None, mangle_dupe_cols=True, dtype=None, engine=None, converters=None, true_values=None, false_values=None, skipinitialspace=False, skiprows=None, skipfooter=0, nrows=None, na_values=None, keep_default_na=True, na_filter=True, verbose=False, skip_blank_lines=True, parse_dates=False, infer_datetime_format=False, keep_date_col=False, date_parser=None, dayfirst=False, cache_dates=True, iterator=False, chunksize=None, compression=‘infer’, thousands=None, decimal=b’.’, lineterminator=None, quotechar=’"’, quoting=0, doublequote=True, escapechar=None, comment=None, encoding=None, dialect=None, error_bad_lines=True, warn_bad_lines=True, delim_whitespace=False, low_memory=True, memory_map=False, float_precision=None)
常用參數:
- filepath_or_buffer :文件路徑
- sep :分隔符,默認逗號,還可以是空格,“|”,“\s+”
- encoding :utf-8 或者 gbk 瞭解更多
讀取txt文件
# 導入工具包
import numpy as np
import pandas as pd
import os
os.chdir('C:/Users/users/Desktop/Python課件/課件編寫/data/')
df1 = pd.read_csv('p3_讀取txt文件.txt',sep='\t') # \n 換行符 \t 製表符
df1.head()
名稱 | 訂單日期 | 訂單完成日期 | 訂單狀態 | |
---|---|---|---|---|
0 | 翻直 | 2018/3/15 | 2018/12/14 | 調撥單 |
1 | 衝孔 | 2018/9/18 | 2018/11/26 | 調撥單 |
2 | 電控盒底 | 2018/5/11 | 2018/9/18 | 調撥單 |
3 | 電控盒底 | 2018/9/28 | NaN | 待確認調出 |
4 | 電控盒底 | 2019/9/30 | NaN | 待確認調入 |
df2 = pd.read_csv('p3_讀取txt文件2.txt',sep=',',index_col=0)
df2.head()
A | B | C | D | E | |
---|---|---|---|---|---|
0 | 0.596277 | 0.017737 | 0.343502 | 0.663646 | 0.615143 |
1 | 0.791484 | 0.160916 | 0.831575 | 0.515607 | 0.069797 |
2 | 0.326376 | 0.974685 | 0.397561 | 0.773967 | 0.287618 |
3 | 0.826980 | 0.210718 | 0.710295 | 0.277416 | 0.090221 |
4 | 0.654102 | 0.798485 | 0.775295 | 0.537434 | 0.936771 |
讀取cvs格式文件
df3 = pd.read_csv('p3_讀取csv文件.csv',encoding='gbk') # encoding 選項 gbk或者utf-8
df3.head()
名稱 | 訂單日期 | 訂單完成日期 | 訂單狀態 | |
---|---|---|---|---|
0 | 翻直 | 2018/3/15 | 2018/12/14 | 調撥單 |
1 | 衝孔 | 2018/9/18 | 2018/11/26 | 調撥單 |
2 | 電控盒底 | 2018/5/11 | 2018/9/18 | 調撥單 |
3 | 電控盒底 | 2018/9/28 | NaN | 待確認調出 |
4 | 電控盒底 | 2019/9/30 | NaN | 待確認調入 |
讀取數據庫文件
- Python
- Navicat軟件 丨★
- heidisql軟件 丨★★★
數據預覽
import numpy as np
import pandas as pd
import os
os.chdir('C:/Users/users/Desktop/Python課件/課件編寫/data/')
df = pd.read_excel('p3_數據預覽.xlsx')
前n行 丨★★
df.head()
列名 丨★★★★★
df.columns # 帶s 帶()
df1 = pd.DataFrame(np.random.randint(10,100,(5,5)),columns=list('ABCDE'))
df1
A | B | C | D | E | |
---|---|---|---|---|---|
0 | 37 | 72 | 80 | 59 | 16 |
1 | 61 | 63 | 54 | 35 | 28 |
2 | 37 | 63 | 35 | 73 | 36 |
3 | 16 | 57 | 31 | 30 | 13 |
4 | 27 | 19 | 63 | 27 | 53 |
字段類型 丨★★
df1.dtypes
A int32
B int32
C int32
D int32
E int32
dtype: object
描述性統計 ★★★★
有一個include參數:object - 彙總字符串 ;number - 彙總數字列 ;all - 所有
df1.describe()
A | B | C | D | E | |
---|---|---|---|---|---|
count | 5.000000 | 5.000000 | 5.000000 | 5.000000 | 5.000000 |
mean | 35.600000 | 54.800000 | 52.600000 | 44.800000 | 29.200000 |
std | 16.637307 | 20.717143 | 20.231164 | 20.179197 | 16.208023 |
min | 16.000000 | 19.000000 | 31.000000 | 27.000000 | 13.000000 |
25% | 27.000000 | 57.000000 | 35.000000 | 30.000000 | 16.000000 |
50% | 37.000000 | 63.000000 | 54.000000 | 35.000000 | 28.000000 |
75% | 37.000000 | 63.000000 | 63.000000 | 59.000000 | 36.000000 |
max | 61.000000 | 72.000000 | 80.000000 | 73.000000 | 53.000000 |
df1.describe().round(2).T # T數據轉置
count | mean | std | min | 25% | 50% | 75% | max | |
---|---|---|---|---|---|---|---|---|
A | 5.0 | 35.6 | 16.64 | 16.0 | 27.0 | 37.0 | 37.0 | 61.0 |
B | 5.0 | 54.8 | 20.72 | 19.0 | 57.0 | 63.0 | 63.0 | 72.0 |
C | 5.0 | 52.6 | 20.23 | 31.0 | 35.0 | 54.0 | 63.0 | 80.0 |
D | 5.0 | 44.8 | 20.18 | 27.0 | 30.0 | 35.0 | 59.0 | 73.0 |
E | 5.0 | 29.2 | 16.21 | 13.0 | 16.0 | 28.0 | 36.0 | 53.0 |
數據索引
df1.index
RangeIndex(start=0, stop=5, step=1)
基本信息
df1.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5 entries, 0 to 4
Data columns (total 5 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 A 5 non-null int32
1 B 5 non-null int32
2 C 5 non-null int32
3 D 5 non-null int32
4 E 5 non-null int32
dtypes: int32(5)
memory usage: 228.0 bytes
df1.info
<bound method DataFrame.info of A B C D E
0 37 72 80 59 16
1 61 63 54 35 28
2 37 63 35 73 36
3 16 57 31 30 13
4 27 19 63 27 53>
倒數n行
df1.tail(2)
A | B | C | D | E | |
---|---|---|---|---|---|
3 | 16 | 57 | 31 | 30 | 13 |
4 | 27 | 19 | 63 | 27 | 53 |
抽樣
df1.sample(3)
A | B | C | D | E | |
---|---|---|---|---|---|
3 | 16 | 57 | 31 | 30 | 13 |
1 | 61 | 63 | 54 | 35 | 28 |
0 | 37 | 72 | 80 | 59 | 16 |
案例
讀取10萬條數據
# 文件路徑
import os
os.chdir('C:/Users/users/Desktop/0基礎數據/')
df1 = pd.read_csv('臺賬.csv',encoding='gbk')
df1.shape
(134412, 24)
讀取100萬條數據
df2 = pd.read_csv('C:/Users/users/Desktop/0基礎數據/歷史/09010228.csv',encoding='gbk')
df2.shape
(2165224, 11)
讀取1000萬條數據
df2 = pd.read_csv('明細.txt')
df2.shape
(9656062, 14)
批量讀取excel數據併合並
import numpy as np
import pandas as pd
import os
os.chdir('C:/Users/users/desktop/Python課件/課件編寫/data/p3_批量讀取數據/')
# 獲取文件夾下面的所有文件名稱,生成一個list
for root, dirs, files in os.walk('.',topdown=False):
print(files)
num = len(files) # 獲取文件個數
data = pd.DataFrame() # 定義一個空的dataframe
# 遍歷所有文件
for i in range(num):
datai = pd.read_excel('./%s' %files[i],index_col=0)
data = data.append(datai) # 添加到總的數據中
print('文件%i列, 第%i個表, 名稱:%s'%(len(data.columns),i,files[i])) # 查看是否全部讀取,格式是否出錯
# 生導出數據
data.to_excel('C:/Users/users/desktop/p3_合併後數據.xlsx')
本節重點
- 讀取excel、csv文件常用參數:文件路徑、sheet_name、sep、encoding
- DataFrame數據預覽:columns、describe()、head()、dtypes