數據分析入門之python讀寫不同數據源的數據

1、讀寫數據庫數據

1.1、數據庫鏈接設置

  • pandas提供了讀取與存儲關係型數據庫數據的函數與方法。除了pandas庫外,還需要使用SQLAlchemy庫建立對應的數據庫連接。SQLAlchemy配合相應數據庫的Python連接工具(例如MySQL數據庫需要安裝mysqlclient或者pymysql庫),使用create_engine函數,建立一個數據庫連接。

  • creat_engine中填入的是一個連接字符串。在使用Python的SQLAlchemy時,MySQL和Oracle數據庫連接字符串的格式如下:

數據庫產品名+連接工具名://用戶名:密碼@數據庫IP地址:數據庫端口號/數據庫名稱?charset = 數據庫數據編碼

數據庫參數如圖所示:
在這裏插入圖片描述
鏈接本地數據庫:

import pandas as pd
from sqlalchemy import create_engine

engin = create_engine('mysql+pymysql://root:[email protected]:3306/test?charset=utf8')

參數說明:

參數 說明
mysql+pymysql mysql數據庫+鏈接數據庫工具
root 用戶名
123456 自定義密碼
127.0.0.1 本地主機,也可以用localhost
test 存放數據的文件
charset=utf8 設置編碼方式爲utf-8

查看鏈接狀況:
在這裏插入圖片描述
數據庫鏈接成功!!!

提示: 如果沒有連接成功,檢查一下是否安裝了pymysql這個工具,可以使用pip install pymysql 安裝。

1.2、數據庫數據讀取

1.2.1、read_sql_table

  • 只能夠讀取數據庫的某一個表格,不能實現查詢的操作。
  • pandas.read_sql_table(table_name, con, schema=None, index_col=None, coerce_float=True, columns=None)
pd.read_sql_table('meal_order_detail1',con=engin)

1.2.2、read_sql_query

  • 只能實現查詢操作,不能直接讀取數據庫中的某個表。
  • pandas.read_sql_query(sql, con, index_col=None, coerce_float=True)
pd.read_sql_query('select * from meal_order_detail1',con=engin)

1.2.3、read_sql

  • 是兩者的綜合,既能夠讀取數據庫中的某一個表,也能夠實現查詢操作。
  • pandas.read_sql(sql, con, index_col=None, coerce_float=True, columns=None)
pd.read_sql('meal_order_detail1',con=engin)
pd.read_sql('select * from meal_order_detail1',con=engin)

1.2.4、讀取數據庫結果

在這裏插入圖片描述

1.2.5、三者區別

  • pandas三個數據庫數據讀取函數的參數幾乎完全一致,唯一的區別在於傳入的是語句還是表名。
參數名稱 說明
sql or table_name 接收string。表示讀取的數據的表名或者sql語句。無默認
con 接收數據庫連接。表示數據庫連接信息。無默認
index_col 接收int,sequence或者False。表示設定的列作爲行名,如果是一個數列則是多重索引。默認爲None
coerce_float 接收boolean。將數據庫中的decimal類型的數據轉換爲pandas中的float64類型的數據。默認爲True
columns 接收list。表示讀取數據的列名。默認爲None

1.3、數據庫數據存儲

  • 數據庫數據讀取有三個函數,但數據存儲則只有一個to_sql方法
  • DataFrame.to_sql(name, con, schema=None, if_exists=’fail’, index=True, index_label=None, dtype=None)
data = pd.read_sql('meal_order_detail1',con=engin)
data.to_sql('new_data', con=engin, if_exists='replace')#if_exists='replace',如果原文件存在,取代掉它

注意: 命名是不要出現大寫,數據庫會默認爲小寫!



2、讀寫csv文件

  • 文本文件是一種由若干行字符構成的計算機文件,它是一種典型的順序文件。
  • csv是一種逗號分隔的文件格式,因爲其分隔符不一定是逗號,又被稱爲字符分隔文件,文件以純文本形式存儲表格數據(數字和文本)。

2.1、讀取csv數據

  • read_table和read_csv常用參數及其說明
參數名稱 說明
filepath 接收string。代表文件路徑。無默認
sep 接收string。代表分隔符。read_csv默認爲“,”,read_table默認爲製表符“[Tab]”
header 接收int或sequence。表示將某行數據作爲列名。默認爲infer,表示自動識別
names 接收array。表示列名。默認爲None
index_col 接收int、sequence或False。表示索引列的位置,取值爲sequence則代表多重索引。默認爲None
dtype 接收dict。代表寫入的數據類型(列名爲key,數據格式爲values)。默認爲None
engine 接收c或者python。代表數據解析引擎。默認爲c

2.1.1、使用read_table來讀取文本文件

  • pandas.read_table(filepath_or_buffer, sep=’\t’, header=’infer’, names=None, index_col=None, dtype=None, engine=None, nrows=None)
pd.read_table('./meal_order_info.csv',sep=',',encoding='gbk')

2.1.2、使用read_csv函數來讀取csv文件

pandas.read_csv(filepath_or_buffer, sep=,, header=’infer’, names=None, index_col=None, dtype=None, engine=None, nrows=None)

2.2、文本文件儲存

  • 文本文件的存儲和讀取類似,結構化數據可以通過pandas中的to_csv函數實現以csv文件格式存儲文件
  • DataFrame.to_csv(path_or_buf=None, sep=’,’, na_rep=”, columns=None, header=True, index=True,index_label=None,mode=’w’,encoding=None)
參數名稱 說明
path_or_buf 接收string。代表文件路徑。無默認
sep 接收string。代表分隔符。默認爲“,”
na_rep 接收string。代表缺失值。默認爲“”
columns 接收list。代表寫出的列名。默認爲None
header 接收boolean,代表是否將列名寫出。默認爲True
index 接收boolean,代表是否將行名(索引)寫出。默認爲True
index_labels 接收sequence。表示索引名。默認爲None
mode 接收特定string。代表數據寫入模式。默認爲w
encoding 接收特定string。代表存儲文件的編碼格式。默認爲None


3、讀寫Excel文件

3.1、Excel文件讀取

  • pandas提供了read_excel函數來讀取“xls”“xlsx”兩種Excel文件。
  • pandas.read_excel(io, sheetname=0, header=0, index_col=None)
參數名稱 說明
io 接收string。表示文件路徑。無默認
sheetname 接收string、int。代表excel表內數據的分表位置。默認爲0
header 接收int或sequence。表示將某行數據作爲列名。默認爲infer,表示自動識別
names 接收int、sequence或者False。表示索引列的位置,取值爲sequence則代表多重索引。默認爲None
index_col 接收int、sequence或者False。表示索引列的位置,取值爲sequence則代表多重索引。默認爲None
dtype 接收dict。代表寫入的數據類型(列名爲key,數據格式爲values)。默認爲None
pd.read_excel('./meal_order_detail.xlsx')

3.2、Excel文件儲存

  • 將文件存儲爲Excel文件,可以使用to_excel方法。其語法格式如下:
  • DataFrame.to_excel(excel_writer=None, sheetname=None’, na_rep=”, header=True, index=True, index_label=None, mode=’w’, encoding=None)
  • to_csv方法的常用參數基本一致,區別之處在於指定存儲文件的文件路徑參數名稱爲excel_writer,並且沒有sep參數,增加了一個sheetnames參數用來指定存儲的Excel sheet的名稱,默認爲sheet1。

(1) 寫入單個sheetname

data = pd.read_excel('./meal_order_detail.xlsx')
data.to_excel('new_data.xlsx',sheet_name='a')

(2) 寫入多個sheetname

with pd.ExcelWriter('./table.xlsx') as w:
    data.to_excel(w,sheet_name='a')
    data.to_excel(w,sheet_name='b')
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章