Zaoqi's Blog -> Python数据分析教程 -> 图解Pandas ->
读取 Excel 文件
读取 Excel 文件¶
在线刷题
检查 or 强化 Pandas
数据分析操作?👉在线体验「Pandas进阶修炼300题」
Note
本页面代码可以在线编辑、执行!
默认读取¶
默认读取是最简单的方式,使用 pd.read_csv('xxxx.csv')
即可读取对应文件
现在尝试使用 pandas
读取当前目录下 某招聘网站数据.csv
import pandas as pd
data = pd.read_csv("某招聘网站数据.csv")
注意
使用 pandas
读取 CSV
与读取 xlsx
格式的 Excel
文件方法大致相同
因此下面与 Excel
相关的读取操作均以 CSV
格式进行介绍
跳过前 n 行¶
读取当前目录下 某招聘网站数据.csv
文件并 跳过前20行
data = pd.read_csv("某招聘网站数据.csv",skiprows = [i for i in range(1,21)])
指定行读取¶
读取当前目录下 某招聘网站数据.csv
文件中全部偶数行
data = pd.read_csv('某招聘网站数据.csv', skiprows=lambda x: (x != 0) and not x % 2)
思考
如果是读取全部奇数行,或者更多满足指定条件的行呢?
data = pd.read_csv('某招聘网站数据.csv', skiprows=lambda x: x % 2) #读取奇数行
指定列名读取¶
读取当前目录下 某招聘网站数据.csv
文件的 positionId、positionName、salary
列
data = pd.read_csv("某招聘网站数据.csv",usecols = ['positionId','positionName','salary'])
指定列匹配读取¶
让我们来个更难一点的,还是读取 某招聘网站数据.csv
文件,但现在有一个 list 中包含多个字段👇
usecols = ['positionId','test','positionName', 'test1','salary']
如果 usecols
中的列名存在于 某招聘网站数据.csv
中,则读取。
usecols = ['positionId', 'test', 'positionName', 'test1', 'salary']
data = pd.read_csv('某招聘网站数据.csv', usecols=lambda c: c in set(usecols))
读取时设置索引¶
读取当前目录下 某招聘网站数据.csv
文件,并在读取时将 positionId
设置为索引列
data = pd.read_csv('某招聘网站数据.csv',index_col=['positionId'])
读取时设置标题¶
读取当前目录下 某招聘网站数据.csv
文件的 positionId、positionName、salary
列,并将标题设置为 ID、岗位名称、薪资
data = pd.read_csv('某招聘网站数据.csv', usecols=[0,1,17],header = 0,names=['ID','岗位名称','薪资'])
读取并处理缺失值¶
读取当前目录下
某招聘网站数据.csv
文件,并不将缺失值标记为NA
读取当前目录下
某招聘网站数据.csv
文件,并将[]
标记为缺失值读取当前目录下
某招聘网站数据.csv
文件,但不处理缺失值
data = pd.read_csv('某招聘网站数据.csv', keep_default_na=False)
data = pd.read_csv('某招聘网站数据.csv',na_values=['[]'])
data = pd.read_csv("某招聘网站数据.csv",na_filter=False)
思考
这三种方式有什么区别?
读取时设置格式¶
读取当前目录下
某招聘网站数据.csv
文件,并将positionId,companyId
设置为字符串格式读取当前目录下
某招聘网站数据.csv
文件,并将createTime
列设置为时间
data = pd.read_csv("某招聘网站数据.csv", dtype={'positionId': str,'companyId':str}) #指定字符串格式
data = pd.read_csv("某招聘网站数据.csv",parse_dates=['createTime']) #指定时间格式
分块读取¶
读取当前目录下 某招聘网站数据.csv
文件,要求返回一个可迭代对象,每次读取 10 行
data = pd.read_csv("某招聘网站数据.csv", chunksize= 10)
思考
为什么这样做?
循环读取数据¶
在 demodata
文件夹下有多个 Excel
文件,要求一次性循环读取全部文件
import os
path = 'demodata/'
filesnames = os.listdir(path)
filesnames = [f for f in filesnames if f.lower().endswith(".xlsx")]
df_list = []
for filename in filesnames:
df_list.append(pd.read_excel(path + filename))
df = pd.concat(df_list)