目录
CSV文件
read_csv()
to_csv()
read_excel()
to_excel()
json文件
read_json()
to_json()
SQL数据库读取
1) 安装pysqlite3模块
2) 建立数据连接
3) 数据库读取数据
当使用 Pandas 做数据分析的时,需要读取事先准备好的数据集,这是做数据分析的第一步。Panda 提供了多种读取数据的方法:
- read_csv() 用于读取文本文件
- read_excel() 用于读取Excel表格
- read_json() 用于读取 json 文件
- read_sql_query() 读取 sql 语句的
- to_csv() 用于存储文本文件
- to_excel() 用于存储Excel表格
- to_json() 用于存储 json 文件
将 CSV 中的数据转换为 DataFrame 对象是非常便捷的。和一般文件读写不一样,它不需要打开文件、读取文件、关闭文件等操作。相反,您只需要一行代码就可以完成上述所有步骤,并将数据存储在 DataFrame 中。文件的读写操作属于计算机的 IO 操作,Pandas IO 操作提供了一些读取器函数,比如 pd.read_csv()、pd.read_excel()、pd.read_json() 等,它们都返回一个 Pandas 对象。
其中 read_csv 的语法格式,如下:
pandas.read_csv(filepath_or_buffer, sep=',', delimiter=None, header='infer',names=None, index_col=None, usecols=None)
下面进行实例演示,首先您需要创建一组数据,并将其保存为 CSV 格式,数据如下:
Name,Hire Date,Salary,Leaves Remaining
John Idle,08/15/14,50000.00,10
Smith Gilliam,04/07/15,65000.00,6
Parker Chapman,02/21/14,45000.00,7
Jones Palin,10/14/13,70000.00,3
Terry Gilliam,07/22/14,48000.00,9
Michael Palin,06/28/13,66000.00,8
注意:将上述数据保存到test
.txt
的文本文件中,然后将文件的扩展名后缀修改为 csv,即可完成 csv 文件的创建。read_csv()
# 接下来,使用下列代码读写数据:
import pandas as pd
#仅仅一行代码就完成了数据读取,但是注意文件路径不要写错
df = pd.read_csv('test.csv')
print(df)输出结果:
Name Hire DateSalaryLeaves Remaining
0John Idle08/15/1450000.010
1Smith Gilliam04/07/1565000.06
2Parker Chapman02/21/1445000.07
3Jones Palin10/14/1370000.03
4Terry Gilliam07/22/1448000.09
5Michael Palin06/28/1366000.08
1) 自定义索引
在 CSV 文件中指定了一个列,然后使用
index_col
可以实现自定义索引。df=pd.read_csv("test.csv",index_col=['Name'])
print(df)输出结果:
Hire DateSalaryLeaves Remaining
Name
John Idle08/15/1450000.010
Smith Gilliam04/07/1565000.06
Parker Chapman02/21/1445000.07
Jones Palin10/14/1370000.03
Terry Gilliam07/22/1448000.09
Michael Palin06/28/1366000.08
2) 查看每一列的dtype
import numpy as np
#转换salary为int64类型
df=pd.read_csv("test.csv",dtype={'Salary':np.int64})
print(df.dtypes)输出结果:
Nameobject
Hire Dateobject
Salaryint64
Leaves Remainingint64
dtype: object
注意:默认情况下,Salary 列的 dtype 是 float 类型,但结果显示其为 int 类型
3) 更改文件标头名
# 使用 names 参数可以指定头文件的名称。import pandas as pd
df=pd.read_csv("test.csv",names=['a','b','c','d'])
print(df)输出结果:
abcd
0NameHire DateSalaryLeaves Remaining
1John Idle08/15/1450000.0010
2Smith Gilliam04/07/1565000.006
3Parker Chapman02/21/1445000.007
4Jones Palin10/14/1370000.003
5Terry Gilliam07/22/1448000.009
6Michael Palin06/28/1366000.008
注意:文件标头名是附加的自定义名称,但是您会发现,原来的标头名(列标签名)并没有被删除,此时可以使用
header
参数来删除它。通过传递标头所在行号实现删除,假如原标头名并没有定义在第一行,您也可以传递相应的行号来删除它。如下所示:
df=pd.read_csv("test.csv",names=['a','b','c','d'],header=0)
print(df)输出结果:
abcd
0John Idle08/15/1450000.010
1Smith Gilliam04/07/1565000.06
2Parker Chapman02/21/1445000.07
3Jones Palin10/14/1370000.03
4Terry Gilliam07/22/1448000.09
5Michael Palin06/28/1366000.08
4) 跳过指定的行数
skiprows
参数表示跳过指定的行数。df=pd.read_csv("test.csv",skiprows=2)
print(df)输出结果:
Smith Gilliam04/07/1565000.006
0Parker Chapman02/21/1445000.07
1Jones Palin10/14/1370000.03
2Terry Gilliam07/22/1448000.09
3Michael Palin06/28/1366000.08
注意:包含标头所在行。
to_csv() Pandas 提供的 to_csv() 函数用于将 DataFrame 转换为 CSV 数据。如果想要把 CSV 数据写入文件,只需向函数传递一个文件对象即可。否则,CSV 数据将以字符串格式返回。
下面看一组简单的示例:
- import pandas as pd
- data = https://www.it610.com/article/{'Name': ['Smith', 'Parker'], 'ID': [101, 102], 'Language': ['Python', 'JavaScript']}
- info = pd.DataFrame(data)
- print('DataFrame Values:\n', info)
- #转换为csv数据
- csv_data = https://www.it610.com/article/info.to_csv()
- print('\nCSV String Values:\n', csv_data)
DataFrame: NameIDLanguage 0Smith101Python 1Parker102JavaScriptcsv数据: ,Name,ID,Language 0,Smith,101,Python 1,Parker,102,JavaScript
【数据分析|Pandas(十三)--读写文件】指定 CSV 文件输出时的分隔符
代码如下:
- import pandas as pd
- #注意:pd.NaT表示null缺失数据
- data = https://www.it610.com/article/{'Name': ['Smith', 'Parker'], 'ID': [101, pd.NaT], 'Language': ['Python', 'JavaScript']}
- info = pd.DataFrame(data)
- csv_data = https://www.it610.com/article/info.to_csv("C:/Users/Administrator/Desktop/pandas.csv",sep='|')
读取 Excel 表格中的数据,可以使用 read_excel() 方法,其语法格式如下:
pd.read_excel(io, sheet_name=0, header=0, names=None, index_col=None, usecols=None, squeeze=False,dtype=None, engine=None, converters=None, true_values=None, false_values=None, skiprows=None, nrows=None, na_values=None, parse_dates=False, date_parser=None, thousands=None, comment=None, skipfooter=0, convert_float=True, **kwds)
下表对常用参数做了说明:
参数名称 | 说明 |
---|---|
io | 表示 Excel 文件的存储路径。 |
sheet_name | 要读取的工作表名称。 |
header | 指定作为列名的行,默认0,即取第一行的值为列名;若数据不包含列名,则设定 header = None。若将其设置 为 header=2,则表示将前两行作为多重索引。 |
names | 一般适用于Excel缺少列名,或者需要重新定义列名的情况;names的长度必须等于Excel表格列的长度,否则会报错。 |
index_col | 用做行索引的列,可以是工作表的列名称,如 index_col = '列名',也可以是整数或者列表。 |
usecols | int或list类型,默认为None,表示需要读取所有列。 |
squeeze | boolean,默认为False,如果解析的数据只包含一列,则返回一个Series。 |
converters | 规定每一列的数据类型。 |
skiprows | 接受一个列表,表示跳过指定行数的数据,从头部第一行开始。 |
nrows | 需要读取的行数。 |
skipfooter | 接受一个列表,省略指定行数的数据,从尾部最后一行开始。 |
文章图片
import pandas as pd
#读取excel数据
df = pd.read_excel('website.xlsx',index_col='name',skiprows=[2])
#处理未命名列
df.columns = df.columns.str.replace('Unnamed.*', 'col_label')
print(df)输出结果:
col_labelranklanguageagelimit
name
编程帮01PHPwww.bianchneg.com
微学苑23PHPwww.weixueyuan.com
92python34Pythonwww.92python.com
再看一组示例:
#index_col选择前两列作为索引列
#选择前三列数据,name列作为行索引
df = pd.read_excel('website.xlsx',index_col='name',index_col=[0,1], usecols=[1,2,3])
#处理未命名列,固定用法
df.columns = df.columns.str.replace('Unnamed.*', 'col_label')
print(df)输出结果:
language
namerank
编程帮1PHP
c语言中文网2C
微学苑3PHP
92python4Python
to_excel() 通过 to_excel() 函数可以将 Dataframe 中的数据写入到 Excel 文件。
如果想要把单个对象写入 Excel 文件,那么必须指定目标文件名;如果想要写入到多张工作表中,则需要创建一个带有目标文件名的
ExcelWriter
对象,并通过sheet_name
参数依次指定工作表的名称。to_ecxel() 语法格式如下:
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_wirter | 文件路径或者 ExcelWrite 对象。 |
sheet_name | 指定要写入数据的工作表名称。 |
na_rep | 缺失值的表示形式。 |
float_format | 它是一个可选参数,用于格式化浮点数字符串。 |
columns | 指要写入的列。 |
header | 写出每一列的名称,如果给出的是字符串列表,则表示列的别名。 |
index | 表示要写入的索引。 |
index_label | 引用索引列的列标签。如果未指定,并且 hearder 和 index 均为为 True,则使用索引名称。如果 DataFrame 使用 MultiIndex,则需要给出一个序列。 |
startrow | 初始写入的行位置,默认值0。表示引用左上角的行单元格来储存 DataFrame。 |
startcol | 初始写入的列位置,默认值0。表示引用左上角的列单元格来储存 DataFrame。 |
engine | 它是一个可选参数,用于指定要使用的引擎,可以是 openpyxl 或 xlsxwriter。 |
import pandas as pd
#创建DataFrame数据
info_website = pd.DataFrame({'name': ['编程帮', 'c语言中文网', '微学苑', '92python'],
'rank': [1, 2, 3, 4],
'language': ['PHP', 'C', 'PHP','Python' ],
'url': ['www.bianchneg.com', 'c.bianchneg.net', 'www.weixueyuan.com','www.92python.com' ]})
#创建ExcelWrite对象
writer = pd.ExcelWriter('website.xlsx')
info_website.to_excel(writer)
writer.save()
上述代码执行后会自动生成 website.xlsx 文件,文件内容如下:
文章图片
json文件 read_json() 可以通过下列方法来读取一个 json 文件,如下所示:
import pandas as pd
data = https://www.it610.com/article/pd.read_json('test.json')
print(data)输出结果:
updownrightleft
white0123
black4567
red891011
blue12131415
to_json() 可以通过下列方法来存储一个 json 文件,如下所示:
frame = pd.DataFrame(np.arange(16).reshape(4, 4),
index=['white', 'black', 'red', 'blue'],
columns=['up', 'down', 'right', 'left'])
print(frame)
frame.to_json('frame.json')
存储结果:
{"up":{"white":0,"black":4,"red":8,"blue":12},"down":{"white":1,"black":5,"red":9,"blue":13},"right":{"white":2,"black":6,"red":10,"blue":14},"left":{"white":3,"black":7,"red":11,"blue":15}}
SQL数据库读取 如果想要从 SQL 数据库读取数据,首先您应该使用 Python 和数据库建立连接,然后将查询语句传递给 read_sql_query() 方法,下面做简单地演示:
1) 安装pysqlite3模块 pip install pysqlite3
2) 建立数据连接
import sqlite3 con = sqlite3.connect("database.db")
3) 数据库读取数据 在 SQLite 数据库中创建一张信息表,可以随意添加一些信息,最后使用下列方法读取数据即可:
#con参数指定操作数据库的引擎,可以指定,也可默认 df = pd.read_sql_query("SELECT * FROM information",con)
推荐阅读
- Android File存储:文件读写
- 数据科学|想转行数据方向,苦苦找不到方法(看这里,数据方向的完整知识体系送给你!)
- python|Python数据可视化大杀器之地阶技法(matplotlib(含详细代码))
- pandas中groupby,apply,lambda函数使用
- CMDB3完善采集端代码(ssh方案的多线程采集), 异常处理, 服务端目录结构的设计(django的app), API数据分析比对入库
- 淘宝APP用户行为数据分析之一 —— 数据集介绍
- 淘宝APP用户行为数据分析之二 —— 数据清洗
- 可视化|【教程】Python数据可视化技巧
- 可视化|干货!Python 可视化分析股票