第三章 Pandas数据读取与输出

文章详细介绍了如何使用Pandas库读取CSV、Excel和JSON文件,包括文件路径设定、分隔符、表头、列名、索引、数据类型转换、空值处理和日期时间解析等关键参数的使用方法。同时,也阐述了数据输出到CSV和Excel的步骤,以及如何在Excel文件中管理多个数据表。
摘要由CSDN通过智能技术生成

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')

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值