Python数据分析:pandas读取和写入数据

继续深入学习pandas相关操作,数据读取写入、分组、合并,转换等等。前面一篇文章里已经写了关于描述性统计以及常用的基本操作。接下来的一段时间里,我将陆续地去掌握并输出。这篇文章是关于数据读取与写入的知识点。

平时工作中,我们会接触到不同的数据文件,比如很常见的excel文件(后缀名为xls和xlsx),csv、txt等文本文件,json文件以及sql文件等等。pandas读取这些数据文件的方法如表格所示:

01 读取写入文本文件

read_csv()方法用来读取 csv格式的数据文件,read_table()方法则是读取通用分隔符分隔的数据文件,它们的参数相同。语法:

pandas.read_csv(filepath_or_buffer, sep=’,’, delimiter=None, header=’infer’, names=None, index_col=None, usecols=None,skiprows=None)

参数说明:

  • filepath_or_buffer: str,表示文件所在位置的字符串,URL等。
  • sep: str, 表示分隔符,分隔符号可以有多个,比如分隔符为"+,+"三个符号,则sep = '+,+',即正则表达式 。read_csv默认分隔符为",",read_table默认为制表符"\t"。
  • delimiter:str,默认为None。sep的别名。
  • header:int,list of int,表示列名的行号。如果没有传递列名,则header = 0,列名为文件的第一行。如果显式传递了列名,则header = None。
  • names:array,指定列名
  • index_col:int,sequence或False。表示索引列的位置,取值为sequence则代表多重索引
  • usecols:array,指定读取的列
  • skiprows:从文件开头算起,需要跳过的行数

先在当前工作目录下创建csv文件,如下图可以看到这个csv文件包含三列数据,列名为studentNo,name,age。使用read_csv将这三列数据读入到DataFrame。使用cat命令显示文件内容:

读取数据

import pandas as pd
df = pd.read_csv('01.csv')
df

当使用read_table()时,运行代码后出现一个Warning,使用的是最新的版本python3.7。根据提示,修改如截图:
FutureWarning: read_table is deprecated, use read_csv instead, passing sep='\t'

df = pd.read_table('doupo.txt')
df

使用to_csv()方法,可以将数据导出为逗号分隔的数据文件。详述省略。

02 读取写入Excel文件

python处理excel文件用到的模块包含openpyxl、xlsxwriter、xlutils、xlrd、xlwt。想要了解更多关于这几个处理excel文件的python包的详情,可以访问python-excel官网。因为我使用的是Anaconda,Anaconda已经默认安装了xlrd和xlwt等模块,故无需再使用pip去安装啦。

而Python的数据分析库pandas提供了read_excel函数来读取.xls和.xlsx两种excel文件。其中.xls是office excel 2007之前的版本默认保存的文件扩展名。而.xlsx是2007版本之后的。 有时一个excel文件会包含多个工作表,比如下面这个表格文有book和movie两个工作表。

使用xlrd读取excel文件:
# xlrd为读取excel的库
import xlrd  
workbook = xlrd.open_workbook('douban.xlsx')
sheetnames = workbook.sheet_names()

sheet1 = workbook.sheet_by_name(sheetnames[1])  
#通过sheet名称获取到第2张工作表book
#或 sheet1 = workbook.sheets()[1] 
#或 sheet1 = workbook.sheet_by_index(1)

print('sheet名称列表:' + sheetnames)  
print('第1张工作表名称:' + sheet1.name)
print('列数:' + str(sheet1.ncols))
print('行数:' + str(sheet1.nrows))
print('第2行所有数据:' + str(sheet1.row_values(2))) # 包括列名这一行,从0算起,
print('第2列所有数据:' + str(sheet1.col_values(1)))

通过pandas.read_excel方法读取excel文件,read_excel( )默认读取第一个工作表的,如果我想要读取movie这个工作表的话,就需要传参啦。

df = pd.read_excel('douban.xlsx', sheet_name = 'movie')
df

这时存储在表中的数据通过pandas.read_excel方法读取到DataFrame中啦,结果显示如下:

使用to_excel()方法,可以将数据存储到excel文件里。写入方法不详说了。

03 数据库的读取与写入

Python处理数据库时同样有第三方库,比如PyMySQL,SQLAlchemy等等,利用这些ORM库(ORM,全称object-relational mapping,即对象关系映射)可以实现对数据库的增删改查。而pandas实现数据库读取有3个方法,分别为read_sql,read_sql_table,read_sql_query。

read_sql_table只能读取数据库的某一个表格,不能实现查询的操作,而read_sql_query只能实现查询操作,不能直接读取数据库中的某个表,read_sql是两者的结合。语法:

pandas.read_sql_table(table_name,con,schema=None,index_col=None,coerce_float=True,columns=None)
pandas.read_sql_query(sql,con,index_col=None,coerce_float=True)
pandas.read_sql(sql,con,index_col=None,coerce_float=True,columns=None)

参数说明:

  • sql、table_name:string类型,分别表示SQL语句和数据库表名
  • con:表示数据库连接信息
  • index_col:int、sequence或者False,表示设定的列作为行名
  • coerce_float:boolean,将数据库中的decimal类型的数据转换为pandas中的float64类型的数据,默认True
  • columns:list类型,表示读取数据的列名,默认None

这里使用的是SQLAlchemy库来建立数据库连接,需要数据库驱动使用的Python内置的SQLlite。对SQLite的简介如下:

SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库,这意味着与其他数据库一样,您不需要在系统中配置。

from sqlalchemy import create_engine
# create_engine()用来初始化数据库连接
engine =  create_engine('sqlite://', echo = False)
df = pd.DataFrame({'name': ['tom', 'David', 'mary'], 'age': [18,19,17], 'score': [89,90,59]})
df

将df写入数据库中取名为“student”的表,需要查看下是否有成功写入数据库,执行sql请求,获取所有数据。实现代码如下:

df.to_sql('student', con=engine)
engine.execute("SELECT * FROM student").fetchall()

使用pandas的读取数据库方法来读取:

# read_sql_query 
df = pd.read_sql_query('SELECT * FROM student', con = engine)

# read_sql_table
df = pd.read_sql_table('student', con = engine)

# read_sql
df = pd.read_sql('SELECT * FROM student', con = engine)
df = pd.read_sql('student', con = engine)
df

以上就是使用数据分析库pandas来读取写入不同数据文件的内容啦。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,923评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,154评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,775评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,960评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,976评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,972评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,893评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,709评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,159评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,400评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,552评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,265评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,876评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,528评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,701评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,552评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,451评论 2 352

推荐阅读更多精彩内容