此文仅进行学习记录
1、DataFrame
import pandas as pd
data1 = [['Google', 10], ['Runoob', 12], ['Wiki', 13]] # 列表型(列表嵌套列表),行标头与列表头默认为索引
data2 = {'Site': ['Google', 'Runoob', 'Wiki'], 'Age': [10, 12, 13]} # N维数组对象Ndarray,ndarray长度必须相同,
data3 = [{'a': 1, 'b': 2}, {'a': 5, 'b': 10, 'c': 20},
{'a': 111, 'b': 222, 'c': 333}] # 字典型(列表嵌套字典),键为列表头。若没有,则此列的值为NaN
# 可以传值的类型有:列表型、ndarray型、字典型
# loc[index]代表返回数据
def datas(data):
df = pd.DataFrame(data, index=['第一行', '第二行', '第三行'])
print(df) # 返回的是pandas dataframe类型
datas(data1)
datas(data2)
datas(data3)
# index代表行表头,columns代表列标题
df1 = pd.DataFrame(data1, columns=['第一列', '第二列'], dtype=str)
print(df1)
print(df1.loc[0]) # 返回的是pandas series类型
2、to_excel
参考文章:Pandas写入Excel函数——to_excel 技术总结
①写入单个sheet中
import pandas as pd
# 写入单个sheet中
df1 = pd.DataFrame({'One': [1, 2, 3]}) # Ndarray型
# 新建excel1.xlsx文件,sheet名称为Sheet1。若存在,则覆盖。
df1.to_excel('excel1.xlsx', sheet_name='Sheet1', index=False) # index false为不写入索引
②通过ExcelWriter写入多个工作表数据中
df1 = pd.DataFrame({'One': [1, 2, 3]})
df2 = pd.DataFrame({'Two': [4, 5, 6]})
with pd.ExcelWriter('excel1.xlsx') as writer:
df1.to_excel(writer, sheet_name='Sheet1', index=False)
df2.to_excel(writer, sheet_name='Sheet2', index=False)
df4 = pd.DataFrame({'Four': [11, 22, 33]})
df5 = pd.DataFrame({'Five': [55, 66, 77]})
with pd.ExcelWriter('excel1.xlsx', mode='a') as writer: # 默认的mode为w,即代表覆盖写入。a代表不覆盖新增。
df4.to_excel(writer, sheet_name='Sheet4', index=False)
df5.to_excel(writer, sheet_name='Sheet5', index=False)
③对excel中的工作表内容进行修改与追加
# startrow、startcol代表修改/追加的起始行、列
# header代表是否写入列名
# 借用openpyxl的load_excel可读取excel的工作表内容
df6 = pd.DataFrame({'Six': [11, 22, 33]})
df7 = pd.DataFrame({'SEVEN': ['AA', 'BB', 'CC']})
with pd.ExcelWriter('excel1.xlsx', mode='a') as writer:
book = load_workbook('excel1.xlsx')
writer.book = book
writer.sheets = dict((ws.title, ws) for ws in book.worksheets) # 复制book的worksheets为writer.sheets
df6.to_excel(writer, sheet_name='Sheet5', index=False, startrow=0, startcol=3)
df7.to_excel(writer, sheet_name='Sheet5', index=False, header=False, startrow=4, startcol=0)