在大多数情况下,处理数据和分析数据时,我们的数据来源都是CSV文件 和Excel文件。
pandas的DataFrame有大量数据处理的方法,所以pandas会将数据读取为DataFrame对象,以便进行后续的数据处理操作
1.读取CSV文件
在pandas中,读取CSV文件主要使用pd.read_csv()
函数。
将 必选参数 - CSV文件的路径传入该函数中,便可以得到对应的DataFrame格式的数据。
import pandas as pd
data = pd.read_csv(r"D:\Users\yequ\电商数据清洗.csv")
print(data)
使用Windows系统的同学在自己的电脑上运行代码时,需要注意路径前要加一个r表示字符串不需要转义。
1.1防止乱码
使用pd.read_csv()
方法读取csv格式文件的时候,常常会因为csv文件中带有中文字符造成读取文件错误。
此时,我们可以将参数encoding设置为"utf-8"。
格式:encoding="utf-8"
import pandas as pd
data = pd.read_csv("/Users/order.csv",encoding="utf-8")
1.2 指定index
之前的例子中,我们在调用pd.read_csv()
函数时没有单独定义index,所以读取出的DataFrame的index默认从0开始。
但往往在处理数据时需要更有意义的index,这会有利于我们对数据进行观察和分析。
比如,将 "order_id",也就是订单号这一列,指定为DataFrame的索引。
对于这种情况,pd.read_csv()
函数提供了一个参数:index_col
,将 列名作为字符串 传入该参数便可以指定index。
在这里,我们指定 "order_id" 这一列作为index。具体代码如下:
# 导入pandas模块,并以"pd"为该模块的简写
import pandas as pd
# TODO 使用pd.read_csv()函数读取路径为 "/Users/yequ/电商数据清洗.csv" 的CSV文件
# 并通过参数index_col来指定"order_id"列为index
# 将结果赋值给变量data
data = pd.read_csv("/Users/yequ/电商数据清洗.csv",index_col= "order_id")
# 使用print()输出变量data
print(data)
1.3读取指定列
现在,我们想要计算每个商品的平均客单价,具体的计算方式是:销售额/销量,也就是payment/items_count。
因为我们只需要用到 "payment" 和 "items_count" 这两列数据,那么在这样的情况下,读取数据中所有列的方式显然效率不够高并且非常消耗内存。
针对只需要读取数据中的某一列或多列的情况,pd.read_csv()
函数提供了一个参数:usecols
,将包含对应的columns的列表传入该参数即可。
比如,只读取 "payment" 和 "items_count" 这两列数据的具体代码如下:
# 导入pandas模块,并以"pd"为该模块的简写
import pandas as pd
# TODO 使用pd.read_csv()函数和usecols参数
# 读取路径为 "/Users/yequ/电商数据清洗.csv" 的CSV文件里:
# "payment"和"items_count"这两列中的数据
# 并将结果赋值给变量data
data = pd.read_csv("/Users/yequ/电商数据清洗.csv",usecols = ["payment","items_count"])
# 使用print()输出变量data
print(data)
1.4 添加columns
如果CSV文件没有列名,那么使用pd.read_csv()
函数就是从第一行直接开始数据的录入了。
这时,就需要给数据添加上columns的名称,让数据变得完整。
针对刚才的情况,pd.read_csv()
函数提供了两个参数,分别是:
header=None
,表明原数据中没有columns;
names
,将包含columns的列表传入该参数即可给数据添加columns。
比如,给没有columns的CSV文件添加 "订单号","用户id","支付金额","商品价格","购买数量","支付时间" 作为columns的具体代码如下:
# 导入pandas模块,并以"pd"为该模块的简写
import pandas as pd
# TODO 使用pd.read_csv()函数、header参数和names参数
# 读取路径为 "/Users/yequ/order_withoutColumns.csv" 的CSV文件
# 将数据的columns设置为:"订单号","用户id","支付金额","商品价格","购买数量","支付时间"
# 将结果赋值给变量data
data = pd.read_csv("/Users/yequ/order_withoutColumns.csv" ,header = None,names=["订单号","用户id","支付金额","商品价格","购买数量","支付时间"])
# 使用print()输出变量data
print(data)
2.保存CSV文件
对DataFrame对象使用to_csv()函数,将文件保存路径作为参数,即可将DataFrame保存到指定的文件路径,并存储为后缀名是.csv的文件。
如果指定路径的文件已经存在,使用to_csv函数会⚠️覆盖原有文件。
本例中,我们保存的指定路径为:/Users/yequ/电商数据清洗2.csv。
to_csv()
函数和read_csv()
函数类似,除了路径这个参数外,还有大量可选参数可以选用。
对于to_csv()
函数,我们再简单了解2个可选参数。
2.1防止行索引信息写入第一列
设置参数index=False,保证不会将行索引信息写入第一列。
# 导入pandas模块,并以"pd"为该模块的简写
import pandas as pd
# 使用pd.read_csv()函数和usecols参数
# 读取路径为 "/Users/yequ/电商数据清洗.csv" 的CSV文件里的"payment"和"items_count"这两列中的数据
# 并将结果赋值给变量data
data = pd.read_csv("/Users/yequ/电商数据清洗.csv", usecols=["payment","items_count"])
# 将data保存到指定路径
print(data)
data.to_csv("/Users/yequ/电商数据清洗2.csv",index = False)
2.2防止乱码
同样的道理,使用to_csv()函数,也有可能因为中文字符的编码问题,造成生成的csv文件乱码。
此时,我们可以将参数encoding设置为"utf-8-sig"。
格式:encoding="utf-8-sig"
3.EXCEL文件读取
3.1 安装xlrd模块
在学习读取Excel文件前,我们需要先安装一个用于读取Excel文件的辅助工具:xlrd 模块。
xlrd 模块可读取.xls和.xlsx文件。
在终端输入代码,pip install xlrd==1.2.0 即可安装 xlrd 模块。
如果电脑中同时存在Python 2 和 3,可能需要将pip改成pip3。也就是:
pip3 install xlrd==1.2.0
pip install openpyxl
注意,同学们在本地安装时,会提醒大家先安装 openpyxl 模块,只需通过 pip install openpyxl 即可安装。
3.2读取Excel文件
在pandas模块中,读取Excel文件主要使用pd.read_excel()
函数。
将 必选参数 - Excel文件的路径传入该函数中,便可以得到对应的DataFrame格式的数据。
3.2.1 读取指定工作表 - sheet_name
当我们需要读取指定工作表时,pd.read_excel()
函数提供了一个参数:sheet_name
,将要读取的工作表名称作为字符串传入该参数即可。
比如,读取 "销售订单数据" 这个工作表的具体代码如下:
# 导入pandas模块,并以"pd"为该模块的简写
import pandas as pd
# 使用pd.read_excel()函数和sheet_name参数
# 读取路径为 "/Users/yequ/2019年4月销售订单.xlsx" 的Excel文件里:"销售订单数据" 这个工作表
# 并将结果赋值给变量data
data = pd.read_excel("/Users/yequ/2019年4月销售订单.xlsx",sheet_name="销售订单数据")
# 使用print()输出变量data
print(data)