在上一节(juejin.cn/post/727369… )中,我们介绍了不同数据集之间关联分析的方法,本节主要介绍如何将分析完成的数据以特定的格式输出,将分析完成之后的数据输出成想要的内容。
9.数据输出
9.1 输出到csv文件
用to_csv方法可以将pandas中的数据输出成一个csv文件,非常方便。
import pandas as pd
# 创建一个简单的数据框
data = {'Name': ['Tom', 'Nick', 'John', 'Tom'],
'Age': [20, 21, 19, 18],
'Score': [90, 85, 88, 92]}
df = pd.DataFrame(data)
# 输出到CSV文件
df.to_csv('output.csv', index=False)
to_csv的一些常用的参数:
参数名 | 描述 |
---|---|
path_or_buf | 文件路径或对象。如果未提供,则结果会返回为字符串 |
sep | 字段间的分隔符,默认为',' |
na_rep | 缺失数据表示的字符串 |
float_format | 浮点数的格式字符串 |
columns | 要写入的列的顺序(列名的列表) |
header | 是否写入列名 |
index | 是否写入行名(索引) |
index_label | 索引的列标签。如果没有给出,并且header和index为True,则索引名称被用作或附加到列标题。如果一个序列被给出,那么索引名就是这个序列 |
mode | 写入文件的模式,你可以选择'w'或'a'等 |
encoding | 文件的编码格式,例如'utf-8' |
compression | 表示压缩的字符串,允许的值是'gzip', 'bz2', 'zip', 'xz', None |
line_terminator | 行结束符,默认为'\n' |
chunksize | 写入文件时的行数 |
date_format | 日期格式的字符串 |
doublequote | 控制字段内引号的处理。当True时,双引号转义。当False时,字段结束 |
escapechar | 用于转义sep和quotechar的字符,当引用为QUOTE_NONE时有效 |
对于一些特殊类型的数据集,可以用上述的一些参数来规范输出的格式:
# 创建一个包含浮点数和日期的数据框
data = {'Values': [1.23456, 2.34567, 3.45678, 4.56789],
'Dates': pd.date_range('2020-01-01', periods=4)}
df = pd.DataFrame(data)
# 输出到CSV文件,浮点数保留两位小数,日期格式为'YYYY-MM-DD',文件压缩为gzip格式,文件编码为'utf-8'
df.to_csv('output.csv', float_format='%.2f', date_format='%Y-%m-%d', compression='gzip', encoding='utf-8')
9.2 输出到excel文件
Pandas 提供了一些基础的 Excel 排版功能。要执行更复杂的排版任务,需要使用 openpyxl
或 xlsxwriter
这样的库。接下来以 xlsxwriter
为例,介绍如何将计算好的数据输出到excel。
一个简单的示例:
import pandas as pd
# 创建一个简单的数据帧
data = {'Name': ['John', 'Anna', 'Peter', 'Linda'],
'Age': [28, 24, 35, 32],
'Rate': [0.34, 0.45, 0.31, 0.52]}
df = pd.DataFrame(data)
# 将数据帧写入Excel文件
writer = pd.ExcelWriter('output.xlsx', engine='xlsxwriter')
df.to_excel(writer, index=False, sheet_name='Sheet1')
# 获取xlsxwriter对象
workbook = writer.book
worksheet = writer.sheets['Sheet1']
# 关闭writer并保存文件
writer.save()
可以得到如下表格:
对于xlsxwriter而言,还可以定义表格的格式,具体方法是通过定义一个表格对象的Formatter来生成最后的表格,这里的格式和excel中的格式相对应,可以定义对齐方式,数字或者字体的格式,颜色等等,非常地灵活。以上面的数据集为例,把第二列和第三列的数字分别定义成保留一位小数和百分数的形式,可以在获取xlsxwriter对象之后加入下面的代码:
# 添加一些排版格式
format1 = workbook.add_format({'num_format': '#,##0.00'}) # 数字格式
format2 = workbook.add_format({'num_format': '0%'}) # 百分比格式
# 第二个参数为列间距
worksheet.set_column('B:B', 18, format1) # 第二列设置为数字格式
worksheet.set_column('C:C', 15, format2) # 第三列设置为百分比格式
除了定义formatter,还可以直接访问单元格,直接定义单元格的格式。
# 添加表头格式:加粗,居中对齐
header_format = workbook.add_format({
'bold': True,
'text_wrap': True,
'align': 'center',
'valign': 'vcenter',
'border': 1})
# 写入表头并应用格式
for col_num, value in enumerate(df.columns.values):
worksheet.write(0, col_num, value, header_format)
最终得到的效果如下:
更多的Pandas输出到excel的例子,详见:xlsxwriter.readthedocs.io/pandas_exam…
9.3 输出到mysql
需要安装sqlalchemy
库,这个例子创建了一个简单的DataFrame,然后将其写入到MySQL数据库中的一个表中:
import pandas as pd
from sqlalchemy import create_engine
# 创建一个DataFrame
data = {
'Name': ['Tom', 'Nick', 'John', 'Tom'],
'Age': [25, 26, 25, 23],
'City': ['New York', 'London', 'New Delhi', 'Sydney']
}
df = pd.DataFrame(data)
# 创建SQLAlchemy引擎
# 格式:create_engine('mysql+driver://username:password@localhost/dbname')
engine = create_engine('mysql+mysqlconnector://user:password@localhost/mydatabase')
# 将DataFrame写入到MySQL数据库的表中
df.to_sql('my_table', con=engine, index=False, if_exists='replace')
在这个例子中,df.to_sql('my_table', con=engine, index=False, if_exists='replace')
是写入MySQL的关键步骤。'my_table'是你想要写入的数据库表的名字,con=engine
指定了连接数据库的引擎,index=False
表示在输出的数据库表中不包含行索引,if_exists='replace'
表示如果表已经存在,就替换掉原有的表。
注意:写入MySQL需要安装相应的数据库驱动,如mysqlconnector或pymysql。