当使用Pandas做数据分析时,需要读取事先准备好的数据集,这是做数据分析的第一步。Pandas提供了多种读取数据的方法:

  • read_csv()用于读取文本文件
  • read_json()用于读取json文件
  • read_sql_query()读取sql语句的

⛄CSV读写文件

CSV又称逗号分隔值文件,是一种简单的文件格式,以特定的结构来排列表格数据。 CSV文件能够以纯文本形式存储表格数据,比如电子表格、数据库文件,并具有数据交换的通用格式。CSV文件会在Excel文件中被打开,其行和列都定义了标准的数据格式。

CSV中的数据转换为DataFrame对象是非常便捷的。和一般文件读写不一样,它不需要你做打开文件、读取文件、关闭文件等操作。相反,您只需要一行代码就可以完成上述所有步骤,并将数据存储在DataFrame中。

Pandas中用于读取文本的函数有两个,分别是:read_csv()read_table(),它们能够自动地将表格数据转换为DataFrame对象。

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

# 新建txt文件,添加数据,另存为csv文件
ID,Name,Age,City,Salary
1,Jack,28,Beijing,22000
2,Lida,32,Shanghai,19000
3,John,43,Shenzhen,12000
4,Helen,38,Hengshui,3500

👀read_csv()

read_csv()表示从CSV文件中读取数据,并创建DataFrame对象。

import pandas as pd
#需要注意文件的路径
df = pd.read_csv(r"D:\Desktop\one.csv")
print(df)

# 输出结果
ID Name Age City Salary
0 1 Jack 28 Beijing 22000
1 2 Lida 32 Shanghai 19000
2 3 John 43 Shenzhen 12000
3 4 Helen 38 Hengshui 3500

(1)自定义索引

CSV文件中指定了一个列,然后使用index_col可以实现自定义索引。

import pandas as pd
df = pd.read_csv(r"D:\Desktop\one.csv",index_col=['ID'])
print(df)

# 输出结果
Name Age City Salary
ID
1 Jack 28 Beijing 22000
2 Lida 32 Shanghai 19000
3 John 43 Shenzhen 12000
4 Helen 38 Hengshui 3500

(2)查看每一列的dtype

import pandas as pd
import numpy as np
df1 = pd.read_csv(r"D:\Desktop\one.csv")
print(df1.dtypes)
print("*"*20)
# 转换salary为float类型
df2 = pd.read_csv(r"D:\Desktop\one.csv",dtype={'Salary':np.float64})
print(df2.dtypes)

# 输出结果
ID int64
Name object
Age int64
City object
Salary int64
dtype: object
********************
ID int64
Name object
Age int64
City object
Salary float64
dtype: object

(3)更改文件标头名

使用names参数可以指定头文件的名称。

import pandas as pd
df1 = pd.read_csv(r"D:\Desktop\one.csv",names=['a','b','c','d','e'])
print(df1)
print("*"*20)
# 文件标头名是附加的自定义名称,但是您会发现,原来的标头名(列标签名)并没有被删除,此时您可以使用`header`参数来删除它。
df2 = pd.read_csv(r"D:\Desktop\one.csv",names=['a','b','c','d','e'],header=0)
print(df2)

# 输出结果
a b c d e
0 ID Name Age City Salary
1 1 Jack 28 Beijing 22000
2 2 Lida 32 Shanghai 19000
3 3 John 43 Shenzhen 12000
4 4 Helen 38 Hengshui 3500
********************
a b c d e
0 1 Jack 28 Beijing 22000
1 2 Lida 32 Shanghai 19000
2 3 John 43 Shenzhen 12000
3 4 Helen 38 Hengshui 3500

(4)跳过指定的行数

skiprows参数表示跳过指定的行数。注意:包含标头所在行。

import pandas as pd
df = pd.read_csv(r"D:\Desktop\one.csv",skiprows=2)
print(df)

# 输出结果
2 Lida 32 Shanghai 19000
0 3 John 43 Shenzhen 12000
1 4 Helen 38 Hengshui 3500

👀to_csv()

Pandas提供的to_csv()函数用于将DataFrame转换为CSV数据。如果想要把CSV数据写入文件,只需向函数传递一个文件对象即可。否则,CSV数据将以字符串格式返回。

import pandas as pd 
data = {'Name':['Smith','Parker'], 'ID':[101, 102], 'Language':['Py', 'JS']}
info = pd.DataFrame(data)
print('DataFrame Values:\n', info)
print("*"*20)
# 转换为csv数据
csv_data = info.to_csv()
print('CSV数据:\n', csv_data)
# 指定CSV文件输出时的分隔符,并将其保存在pandas.csv文件中
csv_data = info.to_csv(r"D:\Desktop\two.csv",sep='|')

# 输出结果
DataFrame Values:
Name ID Language
0 Smith 101 Py
1 Parker 102 JS
********************
CSV数据:
,Name,ID,Language
0,Smith,101,Py
1,Parker,102,JS

⛄Excel读写操作

在数据量较少的情况下,Excel对于数据的处理、分析、可视化有其独特的优势,因此可以显著提升您的工作效率。但是,当数据量非常大时,Excel的劣势就暴露出来了,比如,操作重复、数据分析难等问题。Pandas提供了操作Excel文件的函数,可以很方便地处理Excel表格。

👀read_excel()

如果您想读取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 intlist类型,默认为None,表示需要读取所有列。
squeeze boolean,默认为False,如果解析的数据只包含一列,则返回一个Series。
converters 规定每一列的数据类型。
skiprows 接受一个列表,表示跳过指定行数的数据,从头部第一行开始。
nrows 需要读取的行数。
skipfooter 接受一个列表,省略指定行数的数据,从尾部最后一行开始。

读取操作xlsx文件:

import pandas as pd
# 读取excel数据
df1 = pd.read_excel(r"D:\Desktop\学习网站.xlsx")
print(df1)
print("*"*20)
df2 = pd.read_excel(r"D:\Desktop\学习网站.xlsx",index_col='name',skiprows=[2])
print(df2)
print("*"*20)
# 处理未命名列
df2.columns = df2.columns.str.replace('Unnamed.*', 'col_label')
print(df2)
print("*"*20)
# index_col选择前两列作为索引列,选择前三列数据
df3 = pd.read_excel(r"D:\Desktop\学习网站.xlsx",index_col=[0,1],usecols=[1,2,3])
print(df3)

# 输出结果
Unnamed: 0 name rank language url
0 0 编程帮 1 PHP www.bianchneg.com
1 1 c语言中文网 2 C c.bianchneg.net
2 2 微学苑 3 PHP www.weixueyuan.com
3 3 92python 4 Python www.92python.com
********************
Unnamed: 0 rank language url
name
编程帮 0 1 PHP www.bianchneg.com
微学苑 2 3 PHP www.weixueyuan.com
92python 3 4 Python www.92python.com
********************
col_label rank language url
name
编程帮 0 1 PHP www.bianchneg.com
微学苑 2 3 PHP www.weixueyuan.com
92python 3 4 Python www.92python.com
********************
language
name rank
编程帮 1 PHP
c语言中文网 2 C
微学苑 3 PHP
92python 4 Python

👀to_excel()

通过to_excel()函数可以将Dataframe中的数据写入到Excel文件。如果想要把单个对象写入Excel文件,那么必须指定目标文件名;如果想要写入到多张工作表中,则需要创建一个带有目标文件名的ExcelWriter对象,并通过sheet_name参数依次指定工作表的名称。

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。

创建DataFrame数据,保存xlsx文件。

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(r"D:\Desktop\学习网站.xlsx")
info_website.to_excel(writer)
writer.save()
print('输出成功')

⛄index操作索引

索引(index)是Pandas的重要工具,通过索引可以从DataFame中选择特定的行数和列数,这种选择数据的方式称为“子集选择”。在Pandas中,索引值也被称为标签(label),它在Jupyter笔记本中以粗体字进行显示。索引可以加快数据访问的速度,它就好比数据的书签,通过它可以实现数据的快速查找。

(1)创建索引

import pandas as pd    
data1 = pd.read_csv(r"D:\Desktop\one.csv")
print(data1)
print("*"*20)
#设置"Name"为行索引
data2 = pd.read_csv(r"D:\Desktop\one.csv", index_col ="Name")
# 通过列标签选取多列数据
a1 = data2[["City","Salary"]]
print(a1)
print("*"*20)
# 获取单列数据,或者以列表的形式传入["Salary"]
a2 = data2["Salary"]
print(a2)

# 输出结果
ID Name Age City Salary
0 1 Jack 28 Beijing 22000
1 2 Lida 32 Shanghai 19000
2 3 John 43 Shenzhen 12000
3 4 Helen 38 Hengshui 3500
********************
City Salary
Name
Jack Beijing 22000
Lida Shanghai 19000
John Shenzhen 12000
Helen Hengshui 3500
********************
Name
Jack 22000
Lida 19000
John 12000
Helen 3500
Name: Salary, dtype: int64

(2)设置索引

set_index()将已存在的列标签设置为DataFrame行索引。除了可以添加索引外,也可以替换已经存在的索引。比如您也可以把Series或者一个DataFrme设置成另一个DataFrame的索引。

import pandas as pd  
info = pd.DataFrame({'Name':['Parker','Terry','Smith','William'],
'Year':[2011,2009,2014,2010],
'Leaves': [10,15,9,4]})
print(info)
print("*"*20)
# 设置Name为行索引
print(info.set_index('Name'))

# 输出结果
Name Year Leaves
0 Parker 2011 10
1 Terry 2009 15
2 Smith 2014 9
3 William 2010 4
********************
Year Leaves
Name
Parker 2011 10
Terry 2009 15
Smith 2014 9
William 2010 4

(3)重置索引

使用reset_index()来恢复初始行索引

import pandas as pd
import numpy as np
info = pd.DataFrame([('William', 'C'), ('Smith', 'Java'), ('Parker', 'Python'), ('Phill', np.nan)], index=[1, 2, 3, 4], columns=('name', 'Language'))
print(info)
print("*"*20)
print(info.reset_index())

# 输出结果
name Language
1 William C
2 Smith Java
3 Parker Python
4 Phill NaN
********************
index name Language
0 1 William C
1 2 Smith Java
2 3 Parker Python
3 4 Phill NaN

⛄Pandas分层索引

分层索引(Multiple Index)是Pandas中非常重要的索引类型,它指的是在一个轴上拥有多个(即两个以上)索引层数,这使得我们可以用低维度的结构来处理更高维的数据。比如,当想要处理三维及以上的高维数据时,就需要用到分层索引。

分层索引的目的是用低维度的结构(Series或者DataFrame)更好地处理高维数据。通过分层索引,我们可以像处理二维数据一样,处理三维及以上的数据。分层索引的存在使得分析高维数据变得简单,让抽象的高维数据变得容易理解,同时它比废弃的Panel结构更容易使用。

Pandas可以通过MultiIndex()方法来创建分层索引对象,该对象本质上是一个元组序列,序列中每一个元组都是唯一的。

⛄Pandas执行SQL操作

如果想要从SQL数据库读取数据,首先您应该使用Python和数据库建立连接,然后将查询语句传递给read_sql_query()方法。

import pandas as pd
import sqlite3
# 建立数据连接
con = sqlite3.connect("database.db")
# 数据库读取数据,在SQLite数据库中创建一张信息表,您可以随意添加一些信息
# con参数指定操作数据库的引擎,可以指定,也可默认
df = pd.read_sql_query("SELECT * FROM information",con)

SELECT查询语句使用,把要查询的每个字段分开,当然您也可以使用*来选择所有的字段。

WHERE子句完成条件查询。

GroupBy分组操作。

LIMIT语句主要起到限制作用,比如查询前n行记录。