Python数据分析补充:数据的读取(⽂本、Excel、数据库)
⼀、⽂本⽂件读取
对于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)
具体的参数含义如下:
filepath_or_buffer:指定txt⽂件或csv⽂件所在的具体路径,除此还可以指定存储数据的⽹站链接。
sep:指定原数据集中各变量之间的分隔符,默认为tab制表符。
header:是否需要将原数据集中的第⼀⾏作为表头,默认是需要的,并将第⼀⾏⽤作变量名称;如果原始数据中没有表头,该参数需要设置为None。
names:如果原数据集中没有变量名称,可以通过该参数在数据读取时给数据框添加具体的变量名称。
index_col:指定原数据集中的某些列作为数据框的⾏索引(标签)。
usecols:指定需要读取原数据集中的哪些变量名。
dtype:读取数据时,可以为原数据集的每个变量设置不同的数据类型。
converters:通过字典格式,为数据集中的某些变量设置转换函数。
skiprows:数据读取时,指定需要跳过原数据集的起始⾏数。
skipfootes:数据读取时,指定需要跳过原数据集的末尾⾏数。
nrows:指定数据读取的⾏数。
na_values:指定原数据集中哪些特征的值作为缺失值(默认将两个分隔符之间的空值作为缺失值)。
skip_blank_lines:读取数据时是否需要跳过原数据集中的空⽩⾏,默认为True。
parse_dates:如果参数值为True,则尝试解析数据框的⾏索引;如果参数为列表,则尝试解析对应的⽇期列;如果参数为嵌套列表,则将某些列合并为⽇期列;如果参数为字典,则解析对应的列(即字典中的值),并⽣成新的变量名(即字典中的键)。
python怎么读取excel文件数据thousands:指定原始数据集中的千分位符。
comment:指定注释符,在读取数据时,如果碰到⾏⾸指定的注释符,则跳过该⾏。
encoding:为防⽌中⽂的乱码,可以借助于该参数解决问题(通常设定为“utf-8”或“gbk”)。
我们也可以使⽤read_csv函数读取⽂本⽂件的数据,其参数与read_table函数完全⼀致,所不同的只是read_table函数在sep参数上的默认值是tab制表符,⽽read_csv函数在该参数上的默认值为英⽂状态下的逗号“,”。
为便于理解,如下图的txt⽂件,我们要讲其导⼊。
import pandas as pd
data = pd.read_table(filepath_or_buffer=r'C:\Users\lin-a\Desktop\【数据分析从⼊门到进阶】配套数据\第5章\',#指定⽂件路径
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 s upport skipfooter; you can avoid this warning by specifying engine='python'.
# Remove the CWD from sys.path while we load stuff.
id name gender occupation 000446张敏⼥前端⼯程师
100483李琴⼥Java开发⼯程师
200552赵东来男数据分析师
300589丁顺昌男数据分析师
由于以上代码运⾏后有异常提⽰,在代码最后加上⼀⾏“engine=‘python’”即可解决问题。
import pandas as pd
data = pd.read_table(filepath_or_buffer=r'C:\Users\lin-a\Desktop\【数据分析从⼊门到进阶】配套数据\第5章\',#指定⽂件路径
sep=',',# 指定分隔符
header=None,# 不需要将原始数据中的第⼀⾏作为表头
names=['id','name','gender','occupation'],# 重新命名列索引名称
skiprows=2,# 跳过起始两⾏的数据
skipfooter=2,# 跳过末尾两⾏的数据
comment='#',# 不读取“#”开头的数据⾏
converters={'id':str},# 对⼯号转换数据类型,保留开头的00
engine='python'
)
data
id name gender occupation 000446张敏⼥前端⼯程师
100483李琴⼥Java开发⼯程师
200552赵东来男数据分析师
300589丁顺昌男数据分析师
代码运⾏结果显⽰,成功将txt⽂件内的数据读取到,⽽且为数据新增了变量名称。对于id变量⽽⾔,00开头的编号保持了原样。需要注意的是:
names参数的多个值是通过列表实现的;
converters参数的值则是通过字典实现的。
⼆、电⼦表格的读取
电⼦表格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)
各个参数的含义如下所⽰:
io:指定电⼦表格的具体路径。
sheetname:指定需要读取excel中的第⼏个Sheet,可以传递整数也可以传递具体的Sheet名称。
header:是否需要将数据集的第⼀⾏⽤作表头,默认为是需要的。
skiprows:读取数据时,指定需要跳过原数据集的起始⾏数。
skip_footer:读取数据时,指定需要跳过的原始数据集的末尾⾏数。
index_col:指定哪些列⽤作数据框的⾏索引(标签)。
names:如果原数据中没有变量,可以通过该参数在数据读取时给数据添加具体的表头。
parse_cols:如果参数值为True,则尝试解析数据框的⾏索引;如果参数为列表,则尝试解析对应的⽇期列;如果参数为嵌套列表,则将某些列合并为⽇期列;如果参数为字典,则解析对应的列(即字典中的值),并⽣成新的变量名(即字典中的键)。
parse_dates:该参数在函数内不再⽣效。
na_value:指定原始数据中哪些特殊值代表了缺失值。
thousands:指定原始数据集中的千分位符。
convert_float:默认将所有的数值型变量转换为浮点数。
converters:通过字典格式,为数据集中的某些变量设置转换函数。
我们需要导⼊如下所⽰的Excel⽂件:
这个数据是商品的⼊库信息,存在⼀些问题:
1. 表格没有表头,读取数据时需要考虑添加表头;
2. 第⼀列为商品编号,某些商品是以0开头的,如何避免数据读⼊后0消失;
3. 最后⼀列有⼀个值是未知,如何读⼊数据时指定这样的数据为缺失值。
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 000231462016-03-18连⾐裙237⽩⾊113445272017-06-12⽜仔裤368蓝⾊202236852018-02-10⽪鞋589NaN 300372492017-07-17⼨衫299⽩⾊403682412016-03-23板鞋
299蓝⾊511278822018-09-17西装1599⿊⾊
三、数据库数据的读取
在实际⼯作中,数据通常是存储在数据库中,如SQL Server数据库、MySQL数据库及Oracel数据库等。在使⽤Python进⾏数据分析和挖掘时,依然可以使⽤Pandas模块,所不同的是需要和其他模块搭配使⽤:
读⼊SQL Server数据库的数据要使⽤pymssql模块;
读⼊MySQL数据库的数据要使⽤Pymysql模块。
以SQL Server和MySQL数据库为例,在Jupyter输⼊“! pip install pymssql”和“! pip install pymysql”完成pymssql和pymysql模块的导⼊,然后基于两个模块各⾃的connect函数构建数据库与Python之间的桥梁。最后在搭建好连接的基础上,使⽤Pandas模块中的read_sql函数实现数据库数据的读取。
1. connect函数
(1)t函数
以上参数的含义如下所⽰:
server:指定需要访问的SQL Server服务器,如果是本地数据库,则指定“localhost”,如果是远程服务器,则指定具体的IP地址;
user:指定访问SQL Server数据库的⽤户名;
password:指定访问SQL Server数据库的密码;
database:指定访问SQL Server数据库的具体库名;
charset:指定读取SQL Server数据库的字符集(为了防⽌乱码),如果数据库表中含有中⽂,⼀般可以尝试将该参数设置为“utf-8”或“gbk”。
(2)t函数
以上参数的含义如下所⽰:
host:指定需要访问的MySQL服务器,如果是蹦迪数据库,则指定“localhost”,如果远程服务器,则
指定具体的IP地址;
user:指定访问MySQL数据库的⽤户名;
password:指定访问MySQL数据库的密码;
database:指定访问MySQL数据库的具体库名;
port:指定访问MySQL数据库的端⼝号;
charset:指定读取MySQL数据库的字符集(为了防⽌乱码),如果数据库表中含有中⽂,⼀般可以尝试将该参数设置为“utf-8”或“gbk”。
2. read函数
以上参数的含义如下:
sql:指定⼀段字符型的SQL查询代码,⽤于说明数据的读取逻辑;
con:指定数据库与Python之间的链接桥梁;
index_col:指定哪些字段⽤作数据的索引;
coerce_float:bool类型的值,⽤于判断是否将⾮字符的变量强制转换为浮点型,默认为True;
parse_dates:指定哪些字段需要做⽇期类型的转换;
columns:指定数据中哪些字段需要读⼊到Python环境中。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论