1、背景:
最近在工作中遇到越來越多的的使用pandas或者python來處里寫入操作,尤其是對excel文件或者csv文件的操作更是常見,這里將寫入操作總結(jié)如下,方便記憶,也分享給大家,希望對閱讀者能夠有所幫助
2、pandas寫入數(shù)據(jù)的各種場景使用詳解
2.1、df.to_excel()參數(shù)詳解
df.to_excel(
excel_writer, #存放excel文件的地址。如果是只寫文件名,不寫具體的地址也可。會和py文件存放到一起。
sheet_name='Sheet1', #sheet的名字。一般默認(rèn)為sheet1
na_rep='', #缺失值表示方式,一般默認(rèn)為''。
float_format=None, #格式化浮點數(shù)的字符串。
columns=None, #要寫入excel中的列。list。一般默認(rèn)None,即全部寫入。
header=True, #header即列名是否為columns,一般默認(rèn)為True。
index=True, #index是否寫入excel,一般默認(rèn)為True。
index_label=None, #要寫入excel中的index列。
startrow=0, #從哪一行開始寫入數(shù)據(jù)。默認(rèn)為0,即第一行。
startcol=0, #從哪一列開始寫入數(shù)據(jù)。默認(rèn)為0,即第一列。
engine=None, #可選參數(shù), 用于寫入要使用的引擎, openpyxl或xlsxwriter
merge_cells=True, #返回布爾值, 其默認(rèn)值為True。它將MultiIndex和Hierarchical行寫為合并的單元格。
encoding=_NoDefault.no_default, #默認(rèn)為'utf-8'
inf_rep='inf', #可選參數(shù), 默認(rèn)值為inf。它通常表示無窮大。
verbose=_NoDefault.no_default, #它的默認(rèn)值為True。返回布爾值。它用于在錯誤日志中顯示更多信息。
freeze_panes=None, #整數(shù)的元組(長度2),默認(rèn)為None??蛇x參數(shù), 用于指定要凍結(jié)的最底部一行和最右邊一列。
storage_options=None#
)
2.2 寫入一個sheet表中
【注:要寫入的excel和sheet已存在,則會覆蓋】
import pandas as pd
#創(chuàng)建一個數(shù)據(jù)
df = pd.DataFrame({
'name':['Lily','Jack','Rose','Joe'],
'age':[23,23,33,45],
'job':['student','doctor','worker','lawyer']
},index=range(1,5),
)
#將index重新命名為id
df.index.name='id'
# print(df)
#寫入excel
df.to_excel(r'C:\Users\XXXXXX\Desktop\pandas寫入excel.xlsx',index=True,columns=['name','age'],header=True,startrow=20)
3 同一個excel中寫入多個sheet,sheet名不同
3.1?利用pd.ExcelWriter()寫入多個sheet中
pd.ExcelWriter(
path, #寫入的excel的存放路徑
engine=None, #一般默認(rèn)為io.excel.<extension>.writer,用于編寫的引擎。(目前這個參數(shù)不大懂。)
date_format=None, #設(shè)置寫入excel的日期格式。如"YYYY-MM-DD"
datetime_format=None, #設(shè)置寫入excel的日期時間格式。如"YYYY-MM-DD HH:MM:SS"
mode='w', #{"w","a"},一般默認(rèn)為"w"。使用文件的模式,是追加還是寫入。
**engine_kwargs
)
3.2 利用pd.ExcelWriter()寫入多個sheet中
import pandas as pd
from pandas import ExcelWriter
#創(chuàng)建一個數(shù)據(jù)
df = pd.DataFrame({
'name':['Lily','Jack','Rose','Joe'],
'age':[23,23,33,45],
'job':['student','doctor','worker','lawyer']
},index=range(1,5),
)
#將index重新命名為id
df.index.name='id'
# print(df)
#設(shè)置存入路徑
with ExcelWriter(r'C:\Users\XXXXXX\Desktop\pandas寫入excel.xlsx',mode='w') as writer:
for i in ['sheet_1','sheet_2','sheet_3']:
df.to_excel(writer,sheet_name=i)
writer.save()
3.3 在原來的sheet中追加幾個sheet表。(即不能覆蓋原來的數(shù)據(jù))
import pandas as pd
from pandas import ExcelWriter
#創(chuàng)建一個數(shù)據(jù)
df = pd.DataFrame({
'name':['Lily','Jack','Rose','Joe'],
'age':[23,23,33,45],
'job':['student','doctor','worker','lawyer']
},index=range(1,5),
)
#將index重新命名為id
df.index.name='id'
# print(df)
#設(shè)置存入路徑,設(shè)置引擎,這是使用文件的模式。
with ExcelWriter(r'C:\Users\XXXXXX\Desktop\pandas寫入excel.xlsx',engine='openpyxl',mode='a') as writer:
for i in ['sheet_4','sheet_5','sheet_6']:
df.to_excel(writer,sheet_name=i)
writer.save()
4 在同一個excel,同一個sheet表中追加數(shù)據(jù)
【注:這里有兩種思路
1)先讀取原表,將現(xiàn)有數(shù)據(jù)與原表數(shù)據(jù)拼接后再寫入;
2)直接追加】
4.1 先讀取原表,將現(xiàn)有數(shù)據(jù)與原表數(shù)據(jù)拼接后再寫入;
【注:將df_new寫入excel,這個是只針對一個sheet的表格,如果是多個sheet,是消失的。因為,這其實相當(dāng)于刪除原來的,新建了一個表。】
import pandas as pd
#讀取Excel中的數(shù)據(jù)
df_0 = pd.read_excel(r'C:\Users\XXXXXX\Desktop\pandas寫入excel.xlsx',sheet_name='sheet_1')
#修改一下索引,將id改成索引。
df_0 = df_0.set_index(keys=['id'])
print(df_0)
#創(chuàng)建一個數(shù)據(jù)
df = pd.DataFrame({
'name':['Lily','Jack','Rose','Joe'],
'age':[23,23,33,45],
'job':['student','doctor','worker','lawyer']
},index=range(1,5),
)
#將index重新命名為id
df.index.name='id'
print(df)
df_new = pd.concat([df,df_0],axis=0)
print(df_new)
#將df_new寫入excel,這個是只針對一個sheet的表格,如果是多個sheet,是消失的。因為,這其實相當(dāng)于刪除原來的,新建了一個表。
df_new.to_excel(r'C:\Users\XXXXXX\Desktop\pandas寫入excel.xlsx',sheet_name='sheet_1',index=True)
4.2 Python對excel追加數(shù)據(jù)
利用pd.ExcelWriter(),其實是重新寫入。
import pandas as pd
from pandas import ExcelWriter
from openpyxl import load_workbook
#讀取Excel中的數(shù)據(jù)
df_0 = pd.read_excel(r'C:\Users\XXXXXX\Desktop\pandaswriterexcel.xlsx',sheet_name='Sheet1')
#修改一下索引,將id改成索引。
df_0 = df_0.set_index(keys=['id'])
print(df_0)
old_rows = df_0.shape[0]
df = pd.DataFrame({
'name':['Lucy','Tofy','Anna','liting'],
'age':[10,12,12,9],
'job':['student','doctor','worker','lawyer']
},index=range(old_rows+1,old_rows+5),
)
#將index重新命名為id
df.index.name='id'
print(df)
writer = ExcelWriter(r'C:\Users\XXXXXX\Desktop\pandas寫入excel.xlsx',mode='w')
#現(xiàn)將df_0存入
df_0.to_excel(writer,startrow=0,index=False,sheet_name='Sheet1')
#將df寫入,注意開始行。
df.to_excel(writer,startrow=old_rows+1,header=None,index=False,sheet_name='Sheet1')
writer.save()
5 寫入多個excel中
import pandas as pd
#讀取Excel中的數(shù)據(jù)
df = pd.DataFrame({
'name':['Lucy','Tofy','Anna','liting'],
'age':[10,12,12,9],
'job':['student','doctor','worker','lawyer']
},index=range(1,5),
)
#將index重新命名為id
df.index.name='id'
#利用for循環(huán)存入多個excel
for i in range(1,3):
df.to_excel(fr'C:\Users\XXXXXX\Desktop\p_e_{i}.xlsx',index=True,engine='openpyxl')
6 兩種數(shù)據(jù)類型轉(zhuǎn)成DataFrame寫入excel的案例
6.1 JSON解析后存入Excel
import pandas as pd
#讀取JSON數(shù)據(jù)。
f_path = r'C:\Users\XXXXXX\Desktop\測試數(shù)據(jù).json'
data = pd.read_json(f_path,encoding='utf-8')
# print(data)
#獲取list,result的值。
data_list = data.loc['list','result']
# print(data_list)
df_list = []
for one_info in data_list:
df = pd.DataFrame(one_info,index=[0])
df_list.append(df)
data_excel = pd.concat(df_list)
data_excel.to_excel(r'C:\Users\XXXXXX\Desktop\json_2_excel.xlsx',index=False)
6.2 列表解析后存入Excel
import pandas as pd
#先構(gòu)造一個列表數(shù)據(jù)
data_list = [['name','age','job'],['Lucy',33,'doctor'],['Tom',34,'teacher'],['Anna',22,'student']]
df = pd.DataFrame(data_list[1:],columns=data_list[0])
# print(df)
df.to_excel(r'C:\Users\XXXXXX\Desktop\list_2_excel.xlsx',index=False)
3、pandas寫入csv、txt
3.1 df.to_csv()參數(shù)詳解
df.to_csv(
path_or_buf=None, #文件存儲路徑
sep=',', #分隔符
na_rep='', #缺失值填充,默認(rèn)為''
float_format=None, #浮點小數(shù)的格式。
columns=None, #list。要寫入的字段。一般默認(rèn)為None,即全部寫入。
header=True, #列名。默認(rèn)為True,即寫入的列名為,df的列標(biāo)簽。
index=True, #行索引。默認(rèn)為True,即寫入的行索引為,df的行標(biāo)簽。
index_label=None, #索引列的標(biāo)簽名。
mode='w', #寫入模式{"w","a","r","w+","a+","r+"},一般默認(rèn)為"w",寫入。
encoding=None, #編碼。
compression='infer', #
quoting=None,
quotechar='"',
lineterminator=None,
chunksize=None, #一次寫入的行數(shù)。
date_format=None, #日期格式。
doublequote=True,
escapechar=None,
decimal='.',
errors='strict',
storage_options=None
)
3.2 df.to_csv():寫入數(shù)據(jù)
import pandas as pd
#先構(gòu)造一個列表數(shù)據(jù)
data_list = [['name','age','job'],['Lucy',33,'doctor'],['Tom',34,'teacher'],['Anna',22,'student']]
df = pd.DataFrame(data_list[1:],columns=data_list[0])
# print(df)
df.to_csv(r'C:\Users\XXXXXX\Desktop\list_2_excel.csv',index=False,sep=',')
3.3 df.to_csv():追加數(shù)據(jù)
import pandas as pd
#先構(gòu)造一個列表數(shù)據(jù)
data_list = [['name','age','job'],['Lucy',33,'doctor'],['Tom',34,'teacher'],['Anna',22,'student']]
df = pd.DataFrame(data_list[1:],columns=data_list[0])
# print(df)
df.to_csv(r'C:\Users\XXXXXX\Desktop\list_2_excel.csv',index=False,sep=',',mode='a',header=False)#header=False時,列名才不會追加進(jìn)去。
4、pandas寫入SQL數(shù)據(jù)庫
4.1 df.to_sql()參數(shù)詳情
df.to_sql(
name='table', #表名。
con=con, #連接。
if_exists='append', #判斷這個表是否存在,若存在,添加。
index=False,#索引是否寫入,否。
dtype={'col1':sqlalchemy.types.INTEGER(),
'col2':sqlalchemy.types.NVARCHAR(length=255),
'col_time':sqlalchemy.DateTime(),
'col_bool':sqlalchemy.types.Boolean
}#每一列寫入時的數(shù)據(jù)類型??刹惶?。
)
4.2 實操案例文章來源:http://www.zghlxwxcb.cn/news/detail-798076.html
#導(dǎo)入必要的模塊
import pandas as pd
from sqlalchemy import create_engine
import pymysql
data_list = [['name','age','job'],['Lucy',33,'doctor'],['Tom',34,'teacher'],['Anna',22,'student']]
df = pd.DataFrame(data_list[1:],columns=data_list[0])
#連接MySQl
# engine = create_engine('mysql+pymysql://usrname:password@localhost:端口號/database')
engine = create_engine('mysql+pymysql://sh******ei:SCW*******scw@rm-uf6x********.mysql.rds.aliyuncs.com:3306/*****database')
con = engine.connect()
df.to_sql('to_sql測試',con=con,index=False,if_exists='append')
文章來源地址http://www.zghlxwxcb.cn/news/detail-798076.html
到了這里,關(guān)于Python之Pandas的常用技能【寫入數(shù)據(jù)】的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!