这一章我们讲如何将数据导入到Python中以便我们进行处理。数据导入的方式有很多,经常用的就是从数据库直连得到数据,从csv文件读取数据,从Excel文件读数据,从HTML中读数据,从TXT中读数据。
我们挨个讲解一下:
从csv中导入数据,数据使用mysql5.7的sakila库里的actor表内数据:
a = pda.read_csv("C:/Users/yuexiao.liu/Desktop/2.csv")
print(a.head())
结果如下:
actor_id first_name last_name last_update
0 1 PENELOPE GUINESS 2006-02-15 04:34:33
1 2 NICK WAHLBERG 2006-02-15 04:34:33
2 3 ED CHASE 2006-02-15 04:34:33
3 4 JENNIFER DAVIS 2006-02-15 04:34:33
4 5 JOHNNY LOLLOBRIGIDA 2006-02-15 04:34:33
在某些时候会报UnicodeDecodeError错误,因为字符集的原因,这个时候根据提示的字符集比如说utf-8字符集进行声明即可,例如:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbf in position 0: invalid start byte
#对应处理方法:
a = pda.read_csv("C:/Users/yuexiao.liu/Desktop/2.csv",encoding="utf-8")
如果是excel数据要导入到python中,我们这样做:
b = pda.read_excel("C:/Users/yuexiao.liu/Desktop/3.xlsx")
执行此命令可以看到有一个报错:
ImportError: Install xlrd >= 0.9.0 for Excel support
为此我们安装xlrd模块,在此不细说了,安装之后再执行报错消失。
print(type(b))
结果:
<class 'pandas.core.frame.DataFrame'>
还有一种方式是直连数据库,从数据库取数据,那么怎么做呢?以安装在本地的mysql数据库为例,先安装pymysql模块(pymysql3模块也行,不知道这两个模块有什么区别。但是使用的时候都是import pymysql):
import pymysql
conn = pymysql.connect(host='127.0.0.1',user='root',passwd='******',db='sakila')
sql = "select * from actor"
c = pda.read_sql(sql,conn)
print(c.head())
可以看到结果:
actor_id first_name last_name last_update
0 1 PENELOPE GUINESS 2006-02-15 04:34:33
1 2 NICK WAHLBERG 2006-02-15 04:34:33
2 3 ED CHASE 2006-02-15 04:34:33
3 4 JENNIFER DAVIS 2006-02-15 04:34:33
4 5 JOHNNY LOLLOBRIGIDA 2006-02-15 04:34:33
我这里pycharm并没有出现编码的问题,有的工具使用这个模块可能会报编码错误,这个时候可以修改pymysql的源文件,找到你安装的pymysql的位置(使用搜索),进入然后找到pymysql下面的connects文件,更改,在其中查找charset=跳到def init(…,charset=”,…)此时默认为空,要添加上utf8,不带 “-” 。c里的数据不能直接取出来,只能一行一行取,查看其中一行返回值使用value方法:
print(c.values[1])
结果显示:
[2 'NICK' 'WAHLBERG' Timestamp('2006-02-15 04:34:33')]
要从HTML文件中导入数据:
d = pda.read_html("C:/Users/yuexiao.liu/Desktop/4.htm")
不过这个时候会因为我们没有安装基础的lxml、Beautifulsoup4和htmllib模块报错:
ImportError: lxml not found, please install it
#或者
ImportError: html5lib not found, please install it
#或者
ImportError: BeautifulSoup4 (bs4) not found, please install it
安装之后就不会报错了。注意,d不能使用head或tail方法,因为它返回的是一个列表:
print(type(d))
<class 'list'>
导入TXT文件里面的数据步骤如下:
f = pda.read_table("C:/Users/yuexiao.liu/Desktop/1.txt")
注意!在导入的时候可能出现两个错误,一个是UnicodeDecodeError错误,这个需要查看TXT文件的编码或者更改TXT文件的编码,此处我将其改为utf-8格式的编码错误解决,一个是OSError错误,此错误通过将文件名从中文改为英文或者其他文件名即可解决。