对于csv或txt文本文件,可以使用pandas模块中的read_table函数或者read_csv函数,它们的功能相同,区别在于各自函数中sep参数(即用于指定变量之间的分隔符)默认值不同,具体的参数如下所示:
read_tabel(filepath_or_buffer,sep='\t',header='infer',names=None,index_col=None,usecols=None,
dtype=None,converters=None,skiprows=None,skipfooter=None,nrows=None,na_values=None,
skip_blank_lines=True,parse_dates=False,thousand=None,comment=None,encoding=None)
具体的参数含义如下:
我们也可以使用read_csv函数读取文本文件的数据,其参数与read_table函数完全一致,所不同的只是read_table函数在sep参数上的默认值是tab制表符,而read_csv函数在该参数上的默认值为英文状态下的逗号“,”。
import pandas as pd
data = pd.read_table(filepath_or_buffer=r'C:\Users\lin-a\Desktop\【数据分析从入门到进阶】配套数据\第5章\datas\data1.txt',#指定文件路径
sep=',',# 指定分隔符
header=None,# 不需要将原始数据中的第一行作为表头
names=['id','name','gender','occupation'],# 重新命名列索引名称
skiprows=2,# 跳过起始两行的数据
skipfooter=2,# 跳过末尾两行的数据
comment='#' ,# 不读取“#”开头的数据行
converters={'id':str}# 对工号转换数据类型,保留开头的00
)
data
C:\Users\lin-a\anaconda3\lib\site-packages\ipykernel_launcher.py:10: ParserWarning: Falling back to the 'python' engine because the 'c' engine does not support skipfooter; you can avoid this warning by specifying engine='python'.
# Remove the CWD from sys.path while we load stuff.
id | name | gender | occupation | |
---|---|---|---|---|
0 | 00446 | 张敏 | 女 | 前端工程师 |
1 | 00483 | 李琴 | 女 | Java开发工程师 |
2 | 00552 | 赵东来 | 男 | 数据分析师 |
3 | 00589 | 丁顺昌 | 男 | 数据分析师 |
由于以上代码运行后有异常提示,在代码最后加上一行“engine=‘python’”即可解决问题。
import pandas as pd
data = pd.read_table(filepath_or_buffer=r'C:\Users\lin-a\Desktop\【数据分析从入门到进阶】配套数据\第5章\datas\data1.txt',#指定文件路径
sep=',',# 指定分隔符
header=None,# 不需要将原始数据中的第一行作为表头
names=['id','name','gender','occupation'],# 重新命名列索引名称
skiprows=2,# 跳过起始两行的数据
skipfooter=2,# 跳过末尾两行的数据
comment='#' ,# 不读取“#”开头的数据行
converters={'id':str},# 对工号转换数据类型,保留开头的00
engine='python'
)
data
id | name | gender | occupation | |
---|---|---|---|---|
0 | 00446 | 张敏 | 女 | 前端工程师 |
1 | 00483 | 李琴 | 女 | Java开发工程师 |
2 | 00552 | 赵东来 | 男 | 数据分析师 |
3 | 00589 | 丁顺昌 | 男 | 数据分析师 |
代码运行结果显示,成功将txt文件内的数据读取到,而且为数据新增了变量名称。对于id变量而言,00开头的编号保持了原样。需要注意的是:
电子表格xlsx或xls文件的读取,可以使用read_excel函数:
read_excel(io,sheetname=0,header=0,skiprows=None,skip_footer=0,
index_col=None,names=None,parse_dates=False,na_values=None,
thousands=None,convert_float=True,converters=None)
各个参数的含义如下所示:
这个数据是商品的入库信息,存在一些问题:
import pandas as pd
data2 = pd.read_excel(io=r'C:\Users\lin-a\Desktop\【数据分析从入门到进阶】配套数据\第5章\datas\data2.xlsx',
header=None,
names=['id','date','prod_name','price','color'],
converters={'id':str},# 字典中的键可为我们命名的列索引“id”,也可以为默认索引“0”
na_values='未知' # 将原始数据中的“未知”值转换成缺失值
)
data2
id | date | prod_name | price | color | |
---|---|---|---|---|---|
0 | 0023146 | 2016-03-18 | 连衣裙 | 237 | 白色 |
1 | 1344527 | 2017-06-12 | 牛仔裤 | 368 | 蓝色 |
2 | 0223685 | 2018-02-10 | 皮鞋 | 589 | NaN |
3 | 0037249 | 2017-07-17 | 寸衫 | 299 | 白色 |
4 | 0368241 | 2016-03-23 | 板鞋 | 299 | 蓝色 |
5 | 1127882 | 2018-09-17 | 西装 | 1599 | 黑色 |
在实际工作中,数据通常是存储在数据库中,如SQL Server数据库、MySQL数据库及Oracel数据库等。在使用Python进行数据分析和挖掘时,依然可以使用Pandas模块,所不同的是需要和其他模块搭配使用:
以SQL Server和MySQL数据库为例,在Jupyter输入“! pip install pymssql”和“! pip install pymysql”完成pymssql和pymysql模块的导入,然后基于两个模块各自的connect函数构建数据库与Python之间的桥梁。最后在搭建好连接的基础上,使用Pandas模块中的read_sql函数实现数据库数据的读取。
pymssql.connect(server=None,user=None,password=None,database=None,charset=None)
以上参数的含义如下所示:
pymysql.connect(host=None,user=None,password='',database=None,port=0,charset='')
以上参数的含义如下所示:
pd.read_sql(sql,con,index_col=None,coerce_float=True,parse_dates=None,columns=None)
以上参数的含义如下: