pandas可以将DataFrame数据保存到很多种形式的文件中,例如csv,excel, json, 同时,pandas也可以从csv,excel, json 等文件中读取数据加载成DataFrame。
import pandas as pd
data = [
{'语文': 90, '数学': 92},
{'语文': 98, '数学': 87},
{'语文': 87, '数学': 90},
{'语文': 90, '数学': 98},
]
df = pd.DataFrame(data, index=['小明', '小红', '小刚', '小丽'])
df.index.name = '姓名'
df.to_csv('stu.csv', encoding='gbk')
处理中文一直是个麻烦,即便是在python3中,依然如此,如果数据中有中文,保存到csv中,使用Excel打开就会出现乱码,因此要设置encoding参数,很多资料说需要设置为utf_8_sig, 但在我的电脑上,不起作用,我只好使用了gbk。如果你不想使用Excel打开,而是直接查看文本文件,那么可以不是设置encoding参数,以文本方式打开时,不会有乱码。
我设置了行索引的名称,为的是保存到csv文件中时,让“姓名”成为行索引的列名
姓名,数学,语文
小明,92,90
小红,87,98
小刚,90,87
小丽,98,90
不然,第一行会变成
,数学,语文
to_csv有几个参数需要掌握
参数名 | 含义 | 默认值 |
sep | 分割符 | 默认是半角逗号 |
na_rep | 替换空值 | 空字符串 |
float_format | float格式 | 默认没有,设置成'%.2f'表示保留两位小数 |
columns | 设置保存列 | 默认都保存, 类型是列表 |
header | 是否保存列名即列索引 | True |
index | 是否保存行索引 | True |
import pandas as pd
data = [
{'语文': 90, '数学': 92},
{'语文': 98, '数学': 87},
{'语文': 87, '数学': 90},
{'语文': 90, '数学': 98},
]
df = pd.DataFrame(data, index=['小明', '小红', '小刚', '小丽'])
df.to_excel('stu.xls', sheet_name='考试成绩')
sheet_name 设置文件中的sheet名称,其他参数可以参考to_csv
import pandas as pd
data = [
{'语文': 90, '数学': 92},
{'语文': 98, '数学': 87},
{'语文': 87, '数学': 90},
{'语文': 90, '数学': 98},
]
df = pd.DataFrame(data, index=['小明', '小红', '小刚', '小丽'])
df.to_json('stu.json', force_ascii=False)
df = pd.read_json('stu.json')
print(df)
force_ascii设置为False,可以在文件中正常显示中文, 使用read_json方法可以从json文件中读取数据
to_msgpack方法支持使用msgpack作为序列化工具,将数据序列化以后写入到文件中, 响应的,读取时使用read_msgpack方法
import pandas as pd
data = [
{'语文': 90, '数学': 92},
{'语文': 98, '数学': 87},
{'语文': 87, '数学': 90},
{'语文': 90, '数学': 98},
]
df = pd.DataFrame(data, index=['小明', '小红', '小刚', '小丽'])
df.to_msgpack('stu.data')
# 读取
df = pd.read_msgpack('stu.data')
print(df)
使用to_pickle方法,将以pickle模块序列化数据并写入到文件中,相应的读取数据需要使用read_pickle方法
import pandas as pd
data = [
{'语文': 90, '数学': 92},
{'语文': 98, '数学': 87},
{'语文': 87, '数学': 90},
{'语文': 90, '数学': 98},
]
df = pd.DataFrame(data, index=['小明', '小红', '小刚', '小丽'])
df.to_pickle('stu.data')
df = pd.read_pickle('stu.data')
print(df)
import pandas as pd
data = [
{'语文': 90, '数学': 92},
{'语文': 98, '数学': 87},
{'语文': 87, '数学': 90},
{'语文': 90, '数学': 98},
]
df = pd.DataFrame(data, index=['小明', '小红', '小刚', '小丽'])
df.to_html('stu.html')
df = pd.read_html('stu.html', encoding='utf-8')
print(df)
使用pd.read_html可以从html文件中读取数据,但获得数据不再是DataFrame,而是一个list
前面在介绍如何保存到文件中时,有几种保存方式顺带着介绍了如何读取数据,接下来要重点介绍几个从文件中读取数据的方法,因为他们被使用频率最高
import pandas as pd
data = [
{'语文': 90, '数学': 92},
{'语文': 98, '数学': 87},
{'语文': 87, '数学': 90},
{'语文': 90, '数学': 98},
]
df = pd.DataFrame(data, index=['小明', '小红', '小刚', '小丽'])
df.index.name = '姓名'
df.to_csv('stu.csv')
df = pd.read_csv('stu.csv')
df.set_index('姓名', inplace=True)
print(df)
从csv中读取数据后,会默认用从0开始的整数序列作为行索引,我使用set_index方法重新设置姓名列为行索引。
import pandas as pd
data = [
{'语文': 90, '数学': 92},
{'语文': 98, '数学': 87},
{'语文': 87, '数学': 90},
{'语文': 90, '数学': 98},
]
df = pd.DataFrame(data, index=['小明', '小红', '小刚', '小丽'])
df.index.name = '姓名'
df.to_excel('stu.xls', sheet_name='考试成绩')
df = pd.read_excel('stu.xls')
print(df)
read_excel专门从excel文件中读取数据
read_table是pandas读取表格数据的通用方法, 该方法有很多参数,但绝大多数都不需要设置,尝试用的是sep参数,规定了数据之间的分割符
import pandas as pd
data = [
{'语文': 90, '数学': 92},
{'语文': 98, '数学': 87},
{'语文': 87, '数学': 90},
{'语文': 90, '数学': 98},
]
df = pd.DataFrame(data, index=['小明', '小红', '小刚', '小丽'])
df.index.name = '姓名'
df.to_csv('stu.csv')
df = pd.read_table('stu.csv')
print(df)
QQ交流群: 211426309