pandas-数据读取和保存
pandas数据读取和保存
pandas 可以读取和导入各种数据格式的数据,如CSV,Excel,JSON,SQL,HTML等,不需要手动编写复杂的读取代码。
read_csv
DataFrame.read_csv(filepath_or_buffer, sep=',', delimiter=None, header='infer', names=None, index_col=None, usecols=None, squeeze=False, prefix=None, mangle_dupe_cols=True, dtype=None, engine=None, converters=None, true_values=None, false_values=None, skipinitialspace=False, skiprows=None, nrows=None, na_values=None, keep_default_na=True, na_filter=True, verbose=False, skip_blank_lines=True, parse_dates=False, infer_datetime_format=False, keep_date_col=False, date_parser=None, dayfirst=False, iterator=False, chunksize=None, compression='infer', thousands=None, decimal=b'.', lineterminator=None, quotechar='"', quoting=0, escapechar=None, comment=None, encoding=None, dialect=None, tupleize_cols=False, error_bad_lines=True, warn_bad_lines=True, skipfooter=0, skip_footer=0, doublequote=True, delim_whitespace=False, as_recarray=False, compact_ints=False, use_unsigned=False, low_memory=True, buffer_lines=None, memory_map=False, float_precision=None)
filepath_or_buffer 文件路径,唯一必须参数
sep 指定分隔符
delimiter 备选分隔符
usecols 选取列, 可以使用列序列也可以使用列名
header 指定哪一行为表头
name 指定列的名称 (默认是第一行为数值为每列的名称) 自定义表头 和header二选一
index_col 指定某一列数据作为行索引
usecols 在读取的时候只想要使用到的列
encoding 指定编码方式
相关属性和方法
df.shape # 查看行数和列数
df.dtypes # 查看各字段类型
df.axes # 显示数据行和列名
df.columns # 列名, # 查看字段(⾸⾏)名称
df.info() # 显示有数据类型、索引情况、行列数、各字段数据类型、内存占用等
df.describe() # 查看数值型列的汇总统计,
#计算出各数字字段的总数(count)、平均数(mean)、标准差(std)、最小值(min)、四分位数和最大值(max)
df.head() # 查看前5条,括号里可以写明你想看的条数
df.tail() # 查看尾部5条
df.sample(5) # 随机查看5条
假设csv数据中存储是以下数据
City, State, Capital, Population
beijing, beifang, No, 1.581 Million
shanghai, dongfang, Yes, 0.5 Million
guandong, nanfang, No, 8.623 Million
chengdu, xinan, Yes, 0.95 Million
wuhan, zhongbu, No, 0.463 Million
import pandas as pd
pddf=pd.read_csv("demo.csv",sep=",")
print(pddf)
print(pddf.shape)
print(pddf.dtypes)
print(pddf.columns)
print(pddf.axes)
# 执行结果=================================================
City State Capital Population
0 beijing beifang No 1.581 Million
1 shanghai dongfang Yes 0.5 Million
2 guandong nanfang No 8.623 Million
3 chengdu xinan Yes 0.95 Million
4 wuhan zhongbu No 0.463 Million
(5, 4)
City object
State object
Capital object
Population object
dtype: object
Index(['City', ' State', ' Capital', ' Population'], dtype='object')
[RangeIndex(start=0, stop=5, step=1), Index(['City', ' State', ' Capital', ' Population'], dtype='object')]
自定义列名称
import pandas as pd
col_names = ['Citys',
'States',
'Class',
'Gender',
'Age',
'Price',
'Cabin',
'Station']
pddf = pd.read_csv("demo.csv", sep=",", names=col_names)
print(pddf)
read_excel
pandas.read_excel()的作用:将Excel文件读取到pandas DataFrame中
DataFrame.read_excel(io, sheetname=0, header=0, skiprows=None, skip_footer=0, index_col=None, names=None, parse_cols=None, parse_dates=False, date_parser=None, na_values=None, thousands=None, convert_float=True, has_index_names=None, converters=None, dtype=None, true_values=None, false_values=None, engine=None, squeeze=False, **kwds)
参数说明
io: 字符串,文件的路径对象
sheetname: None、string、int、字符串列表或者是整数列表,default 为0
header: 表示的是哪一行作为列索引,默认是0(第一行)
names: 指定列的名称 (默认是第一行为数值为每列的名称) 自定义表头 和header二选一
index_col: 指定列为索引列,默认None列
engine: 读取引擎 可以修改为 'openpyxl'
相同的相关属性和方法
df.shape # 查看行数和列数
df.dtypes # 查看各字段类型
df.axes # 显示数据行和列名
df.columns # 列名, # 查看字段(⾸⾏)名称
df.info() # 显示有数据类型、索引情况、行列数、各字段数据类型、内存占用等
df.describe() # 查看数值型列的汇总统计,
#计算出各数字字段的总数(count)、平均数(mean)、标准差(std)、最小值(min)、四分位数和最大值(max)
df.head() # 查看前5条,括号里可以写明你想看的条数
df.tail() # 查看尾部5条
df.sample(5) # 随机查看5条
to_excel
DataFrame.to_excel(excel_writer, sheet_name='Sheet1', na_rep='', float_format=None, columns=None, header=True, index=True, index_label=None, startrow=0, startcol=0, engine=None, merge_cells=True, encoding=None, inf_rep='inf', verbose=True, freeze_panes=None)
excel_writer 字符串或Excelwrite对象,文件路径
sheet_name 字符串,默认'Sheet1'
header: 写出列名。如果给出了字符串列表, 则假定它是列名的别名。
index: 是否写入索引。 bool值
index_label: 引用索引列的列标签。如果未指定, 并且标头和索引为True, 则使用索引名称。如果DataFrame使用MultiIndex, 则应给出一个序列。
startrow: 默认值0。它指向转储DataFrame的左上单元格行。
startcol: 默认值0。它指向转储DataFrame的左上方单元格列。
engine: 这是一个可选参数, 用于写入要使用的引擎, openpyxl或xlsxwriter。
merge_cells: 返回布尔值, 其默认值为True。它将MultiIndex和Hierarchical行写为合并的单元格。
encoding: 这是一个可选参数, 可对生成的excel文件进 行编码。仅对于xlwt是必需的。
多个sheet 写入到同一个文件时
import pandas as pd
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) # 不写入列名
不改变文件,新增sheet
import pandas as pd
df3 = pd.DataFrame({'Three': [7, 8, 9]})
with pd.ExcelWriter('excel1.xlsx', mode='a') as writer:
df3.to_excel(writer, sheet_name='Sheet3', index=False)
to_csv
DataFrame.to_csv(path_or_buf=None, sep=',', na_rep='', float_format=None, columns=None, header=True, index=True, index_label=None, mode='w', encoding=None, compression='infer', quoting=None, quotechar='"', line_terminator=None, chunksize=None, date_format=None, doublequote=True, escapechar=None, decimal='.', errors='strict')
path_or_buf=None 字符串或文件目录,文件路径或对象
sep=',' 输出文件的字段分隔符,默认点
na_rep='' 缺失数据填充
float_format=None 小数点保留几位
columns=None 要写入的字段
header=True 列名的别名
index=True 写行名(索引)
index_label=None 索引列的列标签。如果没有给出,并且header和index为True,则使用索引名
mode='w' 写入模式,默认为w,
encoding=None 表示输出文件中使用的编码的字符串,默认为"utf-8"
保存和加载hdf5
HDF(Hierarchical Data Format, 层级数据格式),是设计用来存储和组织大量数据的一组文件格式(HDF4,HDF5)
HDF5 允许您存储大量的数值数据,同时能够轻松、快速地访问数据。数千个数据集可以存储在一个文件中,可以根据需要进行分类和标记
import pandas as pd
# 创建一个DataFrame对象
data = {'name': ['Alice', 'Bob', 'Charlie'], 'age': [25, 30, 35]}
df = pd.DataFrame(data)
# 存储数据到HDF5文件
df.to_hdf('data.h5', key='data')
# 保存数据到HDF5
pd.read_hdf('data.h5', key='data', mode="r")
其他数据格式
- CSV -- 一种非常常用的数据格式
- Pickle -- 一种Python的方式来序列化事物
- MessagePack -- 它就像JSON,但又快又小
- HDF5 -- 一种设计用于存储和组织大量数据的文件格式
- Feather -- 一种用于存储数据帧的数据格式,可以高速读写压缩二进制文件 适合短期存储
- Parquet -- Apache Hadoop的柱状存储格式
参考资料
https://zhuanlan.zhihu.com/p/557325246
https://zhuanlan.zhihu.com/p/166597513
https://blog.csdn.net/weixin_50220061/article/details/109232688