數據挖掘工具pandas(十三)對csv、excel、mysql讀取和存儲

一,pd對於csv文件的讀取和存儲

1,pd讀取csv文件
df_xml = pd.read_csv("./outputs/"+table+".csv", engine='python', 
encoding='utf_8_sig')
2,pd存儲csv文件
df.to_csv("./outputs/df_xml.csv", index=False, mode='w', header=True,
 encoding='utf_8_sig')

二,pd對於excel文件的讀取和存儲

1,pd讀取excel文件

https://www.jb51.net/article/156414.htm
https://blog.csdn.net/weixin_38546295/article/details/83537558

data = pd.read_excel(path)
2,pd存儲excel文件
import xlwt

df.to_excel("./outputs/"+table+".xls", index=False, header=True,
 encoding='utf_8_sig')

三,pd對於mysql數據的讀取和存儲

1,pd讀取mysql數據
1) 第一種方法,pd.read_sql
import pymysql

db = pymysql.connect(
    host="172.31.0.54",
    port=3307,
    user="root",
    passwd="ssb@2017",
    db="ssb_ibt",
    charset="utf8"
)
sql = "select * from table_name where ctid=214;"
df=pd.read_sql(sql, db , index_col=None, coerce_float=False, params=None, parse_dates=None, columns=None, chunksize=None)

https://blog.csdn.net/The_Time_Runner/article/details/86601988
sql:SQL命令字符串
con:連接sql數據庫的engine,一般可以用SQLalchemy或者pymysql之類的包建立
index_col: 選擇某一列作爲index
coerce_float:非常有用,將數字形式的字符串直接以float型讀入
parse_dates:將某一列日期型字符串轉換爲datetime型數據,與pd.to_datetime函數功能類似。可以直接提供需要轉換的列名以默認的日期形式轉換,也可以用字典的格式提供列名和轉換的日期格式,比如{column_name: format string}(format string:"%Y:%m:%H:%M:%S")。
columns:要選取的列。一般沒啥用,因爲在sql命令裏面一般就指定要選擇的列了
chunksize:如果提供了一個整數值,那麼就會返回一個generator,每次輸出的行數就是提供的值的大小。

2)第二種方法,pd.read_sql_table
import sqlalchemy as sqla

engine = sqla.create_engine("mysql+pymysql://" + "root" + ':' + "123456" + '@' + "127.0.0.1" + ":" + "3306" + '/' + "word" + '?charset=utf8')
df = pd.read_sql_table('ssb_editor_category_template_item', engine, columns=['id',"logic_id"])
print(df.head())

columns:選擇的字段

3)第三種方法,pd.read_sql_query
import sqlalchemy as sqla

engine = sqla.create_engine("mysql+pymysql://" + "root" + ':' + "123456" + '@' + "127.0.0.1" + ":" + "3306" + '/' + "word" + '?charset=utf8')
query = "select * from "+ 'ssb_editor_category_template_item'+ " where ctid = " + ctid +";"
df = pd.read_sql_query(query, engine)
print(df.head())
2,pd儲存mysql數據
1) 第一種方法,pymysql(可回滾)
import pymysql

db = pymysql.connect(
    host="172.31.0.54",
    port=3307,
    user="root",
    passwd="ssb@2017",
    db="ssb_ibt",
    charset="utf8"
)
try:
    cursor = db.cursor()
    with open(csv_path, 'r', encoding='utf8') as csv_file:
        reader = csv.reader(csv_file)
        head = next(reader)
        # print(head)
        for row in reader:
            args = tuple(row[:])
            cursor.execute(sql, args)
                
    cursor.close()  # 先關閉遊標
    db.commit()
except Exception as e:
    print(e)
    db.rollback()
2)第二種方法,sqlalchemy
import sqlalchemy as sqla	

engine = sqla.create_engine("mysql+pymysql://" + "root" + ':' + "123456" + '@' + "127.0.0.1" + ":" + "3306" + '/' + "word" + '?charset=utf8')
df.to_sql("ssb_editor_category_template_item",engine,index=False, if_exists='append')

四,解決報錯

1,Warning: (1366, "Incorrect string value: ‘\xD6\xD0\xB9\xFA\xB1\xEA…’ for column 'VARIABLE_VA

https://www.cnblogs.com/shiqi17/p/9409228.html

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