[python][科學(xué)計算][pandas]簡要使用教程8-讀寫

最后一次更新日期: 2019/3/17

pandas是基于numpy的數(shù)據(jù)分析庫,提供一些更易用的數(shù)據(jù)模型和大量高效的統(tǒng)計方法。

使用前先導(dǎo)入模塊:
import pandas as pd
按需導(dǎo)入以下模塊:
import numpy as np
import matplotlib.pyplot as plt

1. 讀寫csv

In [13]: df=pd.DataFrame({'a':[1,2],'b':[3,4]},index=['r1','r2'])

In [14]: df.to_csv()
Out[14]: ',a,b\nr1,1,3\nr2,2,4\n'

In [15]: df.to_csv(index=False)
Out[15]: 'a,b\n1,3\n2,4\n'

In [16]: df.to_csv("d:\\test.csv",index=False)

In [17]: df2=pd.read_csv("d:\\test.csv")

In [18]: df2
Out[18]: 
   a  b
0  1  3
1  2  4

to_csv方法用于寫入csv文件:
參數(shù)path_or_buf設(shè)置文件路徑或?qū)ο?,默認(rèn)為None,表示直接返回完整的內(nèi)容字符串;
參數(shù)sep設(shè)置分隔符,長度為1的字符串,默認(rèn)為',';
參數(shù)na_rep設(shè)置缺失值填充,默認(rèn)''
參數(shù)float_format設(shè)置浮點數(shù)的格式字符串,如'%.2f'表示保留兩位小數(shù);
參數(shù)columns設(shè)置要寫的列,默認(rèn)None,表示全部;
參數(shù)header設(shè)置是否寫入列名,默認(rèn)True,如果給出字符串列表,則作為列別名;
參數(shù)index設(shè)置是否寫入行索引標(biāo)簽,默認(rèn)True
參數(shù)index_label設(shè)置行索引列的列名,默認(rèn)None,會直接使用索引的名稱,不寫入列名需要設(shè)置為False;
參數(shù)encoding設(shè)置編碼格式,python3默認(rèn)utf-8;
參數(shù)chunksize設(shè)置每次批量寫入的塊大小,默認(rèn)一次寫入全部數(shù)據(jù)。

read_csv方法用于讀取csv文件:
參數(shù)filepath_or_buffer設(shè)置文件路徑或類文件對象,必須賦值;
參數(shù)sep設(shè)置分隔符,長度為1的字符串,默認(rèn)為',';
參數(shù)header設(shè)置作為列名的行號,可傳入列表,會讀取為多級索引,默認(rèn)是第一行作為列名,當(dāng)通過names顯示傳遞列名時,該設(shè)置無效,另外,該參數(shù)會跳過注釋行和空行;
參數(shù)names設(shè)置列名列表,默認(rèn)為None,如果文件不含列名,header也應(yīng)設(shè)置為None,該參數(shù)不能有重復(fù)項,會報錯;
參數(shù)index_col設(shè)置作為行標(biāo)簽的列號,可傳入列表,會讀取為多級索引,默認(rèn)不設(shè)置;
參數(shù)usecols設(shè)置要讀取的列列表,可以是列位置(int)或是列名(str)的列表,也可以傳入對列名進行邏輯判斷的函數(shù),結(jié)果為True的列將被返回;
參數(shù)prefix設(shè)置默認(rèn)列名前綴,在沒有設(shè)置列名時會將該前綴組合列號作為列名;
參數(shù)dtype設(shè)置數(shù)據(jù)類型,dict類型,鍵為列名,值為numpy數(shù)據(jù)類型,默認(rèn)None
參數(shù)skiprows設(shè)置開頭要跳過的行數(shù),需要傳入int,也可以設(shè)置要跳過的行號,傳入list of int或?qū)π刑栠M行邏輯判斷的函數(shù);
參數(shù)skipfooter設(shè)置尾部要跳過的行數(shù),需要傳入int;
參數(shù)nrows設(shè)置要讀取的行數(shù),用于分批讀取大文件;
參數(shù)na_filter設(shè)置是否檢測缺失值,默認(rèn)True,在確定沒有缺失值的情況下可以關(guān)閉以提升讀取性能;
參數(shù)skip_blank_lines設(shè)置是否跳過空行,默認(rèn)True
參數(shù)encoding設(shè)置編碼格式,python3默認(rèn)utf-8;
參數(shù)error_bad_lines設(shè)置列數(shù)異常的壞行是否報錯,默認(rèn)TrueFalse時會直接剔除壞行;
參數(shù)chunksize設(shè)置分塊的大小,如果設(shè)置,會按該大小分塊讀取并以迭代器返回。

2. 讀寫excel

In [5]: df=pd.DataFrame({'a':[1,2],'b':[3,4]},index=['r1','r2'])

In [7]: df.to_excel('d:\\test.xlsx',sheet_name='test1',index=False)

In [8]: df2=pd.read_excel('d:\\test.xlsx',sheet_name=0)

In [9]: df2
Out[9]: 
   a  b
0  1  3
1  2  4

to_excel方法用于寫入xls或xlsx文件:
參數(shù)excel_writer設(shè)置文件路徑或ExcelWriter,必須賦值;
參數(shù)sheet_name設(shè)置要讀取的工作表名稱,默認(rèn)'Sheet1';
參數(shù)na_rep設(shè)置缺失值填充,默認(rèn)'';
參數(shù)float_format設(shè)置浮點數(shù)的格式字符串,如'%.2f'表示保留兩位小數(shù);
參數(shù)columns設(shè)置要寫入的列,為列名的序列;
參數(shù)header設(shè)置是否寫入列名,默認(rèn)True,當(dāng)輸入字符串列表時會當(dāng)作列的別名;
參數(shù)index設(shè)置是否寫入行索引標(biāo)簽,默認(rèn)True;
參數(shù)index_label設(shè)置行索引列的列名,當(dāng)存在多級索引時應(yīng)當(dāng)輸入字符串列表,默認(rèn)None,會直接使用索引的名稱;
參數(shù)startrow設(shè)置寫入的起始行,默認(rèn)0;
參數(shù)startcol設(shè)置寫入的起始列,默認(rèn)0;
參數(shù)merge_cells設(shè)置單元格是否合并,默認(rèn)True。

read_excel方法用于讀取xls或xlsx文件:
參數(shù)io設(shè)置文件路徑或Excel文件對象,必須賦值;
參數(shù)sheet_name設(shè)置要讀取的工作表,可以傳入序號(int)或工作表名(str)或是包含前兩種的列表,傳入None表示全部,默認(rèn)0;
參數(shù)header設(shè)置解析為列名的行號,傳入行號的列表時會解析為多級索引,如果沒有列名,需要設(shè)置為None
參數(shù)names設(shè)置列名,與header配合使用,默認(rèn)None;
參數(shù)index_col設(shè)置解析為行標(biāo)簽的列號,傳入列號的列表時會解析為多級索引,默認(rèn)None;
參數(shù)usecols設(shè)置需要返回的列,可傳入列號的列表list of int、列名的列表list of str、用逗號分隔的列名序列(例如 'A,B,C')或用冒號標(biāo)識的列名范圍(例如 'A:E')str,也可傳入對列名進行邏輯判斷的函數(shù),結(jié)果為True的列將被返回;
參數(shù)dtype設(shè)置數(shù)據(jù)類型,dict類型,鍵為列名,值為numpy數(shù)據(jù)類型,默認(rèn)None;
參數(shù)skiprows設(shè)置開頭要跳過的行數(shù),需要傳入int,也可以設(shè)置要跳過的行號,傳入list of int或?qū)π刑栠M行邏輯判斷的函數(shù);
參數(shù)skipfooter設(shè)置尾部要跳過的行數(shù),需要傳入int。

3. 讀寫sql

In [21]: import sqlalchemy as sqla
    ...: username='sa'
    ...: password='123456'
    ...: server='127.0.0.1'
    ...: database='Test'
    ...: charset='utf8'
    ...: engine = sqla.create_engine('mssql+pymssql://{}:{}@{}/{}?charset={}'.format(username,password,server,database,charset))

In [23]: df=pd.DataFrame({'a':[1,2],'b':[3,4]},index=['r1','r2'])

In [24]: df.to_sql('test1',engine,if_exists='append',index=False)

In [25]: df.to_sql('test1',engine,if_exists='append',index=False)


In [27]: df2=pd.read_sql('select * from test1',engine)

In [28]: df2
Out[28]: 
     a    b
0  1.0  3.0
1  2.0  4.0
2  1.0  3.0
3  2.0  4.0

to_sql方法用于寫入數(shù)據(jù)庫:
參數(shù)name設(shè)置要寫入的表名,str類型;
參數(shù)conn設(shè)置數(shù)據(jù)庫連接,sqlalchemy.engine.Engine類型,需要配合sqlalchemy庫使用,通過create_engine方法創(chuàng)建,連接字符串格式形如'{數(shù)據(jù)庫類型}+{驅(qū)動名}://{用戶名}:{密碼}@{服務(wù)器地址}:{端口號}/{數(shù)據(jù)庫名}?charset={字符集}'
參數(shù)if_exists設(shè)置表存在時的處理方式,'fail'表示拋出異常,'replace'表示替換現(xiàn)有表,'append'表示作為新數(shù)據(jù)插入現(xiàn)有表,默認(rèn)'fail'
參數(shù)index設(shè)置行索引標(biāo)簽是否作為一列寫入,默認(rèn)True;
參數(shù)index_label設(shè)置行索引標(biāo)簽列的列名,當(dāng)存在多級索引時應(yīng)當(dāng)輸入字符串列表,默認(rèn)None,會直接使用索引的名稱;
參數(shù)chunksize設(shè)置每次批量寫入的塊大小,默認(rèn)一次寫入全部數(shù)據(jù);
參數(shù)dtype設(shè)置寫入的數(shù)據(jù)類型,dict類型,鍵為列名,值為sqlalchemy數(shù)據(jù)類型;

read_sql方法用于讀取數(shù)據(jù)庫:
參數(shù)sql設(shè)置要執(zhí)行的sql查詢或表名;
參數(shù)conn設(shè)置數(shù)據(jù)庫連接,sqlalchemy.engine.Engine類型;
參數(shù)index_col設(shè)置作為行標(biāo)簽索引的列名,傳入列名的列表時會生成多級索引;
參數(shù)coerce_float設(shè)置是否嘗試將一些非字符串非數(shù)字對象(如decimal.Decimal)的值轉(zhuǎn)換為浮點數(shù),默認(rèn)True
參數(shù)params設(shè)置傳遞給執(zhí)行sql的參數(shù)列表,具體格式由使用的驅(qū)動決定;
參數(shù)parse_dates設(shè)置要解析為時間的列名列表,默認(rèn)None;
參數(shù)columns設(shè)置要讀取的列,僅在sql參數(shù)傳入表名時有效,默認(rèn)None讀取全部列;
參數(shù)chunksize設(shè)置分塊的大小,如果設(shè)置,會按該大小分塊讀取并以迭代器返回。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容