Python數據分析基礎_第3節:數據讀取與預覽

第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

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