這是一個關於淘寶母嬰產品的用戶消費行爲的數據集,然後基於這個數據集,做數據清洗
數據集地址:https://pan.baidu.com/s/1kMH1AhE8RUyaT73rvJsVPQ
提取碼:aai6
csv文件讀寫
import pandas as pd
import numpy as np
import os
# 更改文件路勁
os.chdir(r'G:\pythonProject\pc\Python數據清洗\data')
#設置最大顯示列數
pd.set_option('display.max_columns', 20)
#設置最大顯示行數
pd.set_option('display.max_rows', 100)
# 嬰兒信息表
baby = pd.read_csv('sam_tianchi_mum_baby.csv', encoding='utf-8')#默認將第一行作爲表頭,一般用utf-8編碼
baby.head(10)
# 編碼爲gbk中文編碼
# 訂單數據
order = pd.read_csv('meal_order_info.csv',encoding = 'gbk', dtype = {'info_id':str,'emp_id':str})
#這裏轉換字段類型方便統一處理
order
excel文件讀寫
# 訂單數據
df1 = pd.read_excel('meal_order_detail.xlsx',encoding = 'utf-8',sheet_name = 'meal_order_detail1')# 讀取excel需要註明具體哪一個工作簿,否則就是第一個工作簿
df1.head(5)
df2 = pd.read_excel('meal_order_detail.xlsx',encoding = 'utf-8',sheet_name = 0)# sheet_name可以爲數字,代表第幾個工作簿
df2.head(5)
#保存數據
df1.to_excel('a1.xlsx',sheet_name='one',index=False)
數據庫文件讀寫
#導入相關庫
import pymysql
from sqlalchemy import create_engine
按實際情況依次填寫MySQL的用戶名、密碼、IP地址、端口、數據庫名 create_engine(‘mysql+pymysql://user:passward@IP:3306/test01’)
root 用戶名
passward --密碼
IP : 服務區IP
3306: 端口號
test01 :數據庫名稱
# 建立連接
conn = create_engine('mysql+pymysql://root:123456@localhost:3306/test')
# 讀取數據
sql = 'select * from meal_order_info' #選擇數據庫中表名稱
df1 = pd.read_sql(sql,conn)
#df1 是個dataframe格式
# # # 函數
def query(table):
host = 'localhost'
user = 'root'
password = '123456'
database = 'test'
port = 3306
conn = create_engine("mysql+pymysql://{}:{}@{}:{}/{}".format(user, password, host, port, database))
#SQL語句,可以定製,實現靈活查詢
sql = 'select * from ' + table #選擇數據庫中表名稱
# 使用pandas 的read_sql函數,可以直接將數據存放在dataframe中
results = pd.read_sql(sql,conn)
return results
df2 = query('dim_color')
df2
數據保存
df.to_sql(name,con=engine,if_exists=‘replace/append/fail’,index=False)
name是表名
con是連接
if_exists:表如果存在怎麼處理 – append:追加 – replace:刪除原表,建立新表再添加 – fail:什麼都不幹
index=False:不插入索引index
import os
os.chdir(r'G:\pythonProject\pc\Python數據清洗\data')
df = pd.read_csv('baby_trade_history.csv')
try:
df.to_sql('dim_color',con = conn, index= False,if_exists= 'replace')
print(df.head(5))
except:
print('error')
#Python是否能將數據寫入數據庫,很多時候取決於數據庫的權限