3.1 数据读取
读取函数一般会赋值给一个变量df,df = pd.read_<xxx>();
输出函数是将变量自身进行操作并输出df.to_<xxx>()。
(1) CSV文件
# 文件目录
pd.read_csv('data.csv') # 如果文件与代码文件在同一目录下
pd.read_csv('data/my/data.csv') # 指定目录
pd.read_csv('data/my/my.data') # CSV文件的扩展名不一定是.csv
(2)Excel
# 返回DataFrame
pd.read_excel('team.xlsx') # 默认读取第一个标签页Sheet
pd.read_excel('path_to_file.xlsx', sheet_name='Sheet1') # 指定Sheet
(3)JSON
# data.json为同目录下的一个文件
pd.read_json('data.json')
jdata='{"res":{"model":"iPhone","browser":"Safari","version":"604.1"},"status":200}'
pd.read_json(jdata)'''
3.2 读取CSV详解
(1)分隔符
sep参数是字符型的,代表每行数据内容的分隔符号,默认是逗号,另外常见的还有制表符(\t)、空格等
# 数据分隔符默认是逗号,可以指定为其他符号
pd.read_csv(data, sep=
'\t') # 制表符分隔tabpd.read_table(data) #
read_table 默认是制表符分隔tabpd.read_csv(data, sep=
'|') # 制表符分隔tab
(2)表头
header参数支持整型和由整型组成的列表,指定第几行是表头,默认会自动推断把第一行作为表头。
pd.read_csv(data, header=0) # 第一行
pd.read_csv(data, header=None) # 没有表头
pd.read_csv(data, header=[0,1,3])# 多层索引MultiIndex
(3)列名
names用来指定列的名称,它是一个类似列表的序列,与数据一一对应。如果文件不包含列名,那么应该设置header=None,列名列表中不允许有重复值。
pd.read_csv(data, names=['列1', '列2']) # 指定列名列表
pd.read_csv(data, names=['列1', '列2'], header=None)
(4) 索引
index_col用来指定索引列,可以是行索引的列编号或者列名,如果给定一个序列,则有多个行索引。Pandas不会自动将第一列作为索引,不指定时会自动使用以0开始的自然索引。
# 支持int、str、int序列、str序列、False,默认为None
pd.read_csv(data, index_col=False) # 不再使用首列作为索引
pd.read_csv(data, index_col=0) # 第几列是索引
pd.read_csv(data, index_col='年份') # 指定列名
pd.read_csv(data, index_col=['a','b']) # 多个索引
pd.read_csv(data, index_col=[0, 3]) #按列索引指定多个索引
(5) 使用部分列
如果只使用数据的部分列,可以用usecols来指定,这样可以加快加载速度并降低内存消耗。
# 支持类似列表的序列和可调用对象
# 读取部分列pd.read_csv(data,usecols=[0,4,3]) # 按索引只读取指定列,与顺序无关
pd.read_csv(data,usecols=['列1', '列5']) # 按列名,列名必须存在
# 指定列顺序,其实是df的筛选功能
pd.read_csv(data,usecols=['列1', '列5'])[['列5', '列1']]
# 以下用callable方式可以巧妙指定顺序,in后面的是我们要的顺序
pd.read_csv(data,usecols=lambda x: x.upper() in ['COL3', 'COL1'])
(6)处理重复列名
mangle_dupe_cols
如果该参数为True,当列名有重复时,解析列名将变为X, X.1, …, X.N,而不是X, …, X。如果该参数为False,那么当列名中有重复时,前列将会被后列覆盖。
(7) 数据类型
dtype可以指定各数据列的数据类型
# 传入类型名称,或者以列名为键、以指定类型为值的字典
pd.read_csv(data, dtype=np.float64) # 所有数据均为此数据类型
pd.read_csv(data, dtype={'c1':np.float64, 'c2': str}) # 指定字段的类型
pd.read_csv(data, dtype=[datetime, datetime, str, float]) # 依次指定
(8) 跳过指定行
# 类似列表的序列或者可调用对象
# 跳过前三行
pd.read_csv(data, skiprows=2)
# 跳过前三行
pd.read_csv(data, skiprows=range(2))
# 跳过指定行
pd.read_csv(data, skiprows=[24,234,141])
# 跳过指定行
pd.read_csv(data, skiprows=np.array([2, 6, 11]))
# 隔行跳过
pd.read_csv(data, skiprows=lambda x: x % 2 != 0)
(9)空值替换
na_values参数的值是一组用于替换NA/NaN的值。如果传参,需要指定特定列的空值。
# 可传入标量、字符串、类似列表序列和字典,默认为None
# 5和5.0会被认为是NaN
pd.read_csv(data, na_values=[5])
# ?会被认为是NaN
pd.read_csv(data, na_values='?')
# 空值为NaN
pd.read_csv(data, keep_default_na=False, na_values=[""])
# 字符NA和字符0会被认为是NaN
pd.read_csv(data, keep_default_na=False, na_values=["NA", "0"])
# Nope会被认为是NaN
pd.read_csv(data, na_values=["Nope"])
# a、b、c均被认为是NaN,等于na_values=['a','b','c']
pd.read_csv(data, na_values='abc')
# 指定列的指定值会被认为是NaN
pd.read_csv(data, na_values={'c':3, 1:[2,5]})
(10) 日期时间解析
pd.read_csv(data, parse_dates=['年份'], date_parser=date_parser)
parse_dates参数用于对时间日期进行解析
# 布尔型、整型组成的列表、列表组成的列表或者字典,默认为False
pd.read_csv(data, parse_dates=True) # 自动解析日期时间格式
pd.read_csv(data, parse_dates=['年份']) # 指定日期时间字段进行解析
# 将第1、4列合并解析成名为“时间”的时间类型列
pd.read_csv(data, parse_dates={'时间':[1,4]})
(11) 符号
置千分位分隔符thousands:
# 字符型,默认为None
pd.read_csv('test.csv', thousands=',') # 逗号分隔
3.3 读取Excel
(1)表格
sheet_name可以指定Excel文件读取哪个sheet,如果不指定,默认读取第一个。
# 字符串、整型、列表、None,默认为0
pd.read_excel('tmp.xlsx', sheet_name=1) # 第二个sheet
pd.read_excel('tmp.xlsx', sheet_name='总结表') # 按sheet的名字
# 读取第一个、第二个、名为Sheet5的sheet,返回一个df组成的字典
dfs = pd.read_excel('tmp.xlsx', sheet_name=[0, 1, "Sheet5"])
dfs = pd.read_excel('tmp.xlsx', sheet_name=None) # 所有sheet
dfs['Sheet5'] # 读取时按sheet名
(2)表头
数据的表头参数为header,如不指定,默认为第一行。
# 整型、整型组成的列表,默认为 0
pd.read_excel('tmp.xlsx', header=None) # 不设表头
pd.read_excel('tmp.xlsx', header=2) # 第三行为表头
pd.read_excel('tmp.xlsx', header=[0, 1]) # 两层表头,多层索引
(3)列名
用names指定列名,也就是表头的名称,如不指定,默认为表头的名称。
# 序列,默认为None
pd.read_excel('tmp.xlsx', names=['姓名', '年龄', '成绩'])
pd.read_excel('tmp.xlsx', names=c_list) # 传入列表变量
# 没有表头,需要设置为
Nonepd.read_excel('tmp.xlsx', header=None, names=None)
4 数据输出
4.1 CSV
df.to_csv('done.csv')
df.to_csv('data/done.csv') # 可以指定文件目录路径
df.to_csv('done.csv',index=False) # 不要索引
4.2 Excel
# 导出,可以指定文件路径
df.to_excel('path_to_file.xlsx')
# 指定sheet名,不要索引
df.to_excel('path_to_file.xlsx', sheet_name='Sheet1', index=False)
# 指定索引名,不合并单元格
df.to_excel('path_to_file.xlsx', index_label='label', merge_cells=False)
多个数据的导出如下:
# 将多个df分不同sheet导入一个Excel文件中
with pd.ExcelWriter('path_to_file.xlsx') as writer:
df1.to_excel(writer, sheet_name='Sheet1')
df2.to_excel(writer, sheet_name='Sheet2')