小白学 Python 数据分析(7):Pandas (六)数据导入

人生苦短,我用 Python
前文传送门:
小白学 Python 数据分析(2):Pandas (一)概述
小白学 Python 数据分析(3):Pandas (二)数据结构 Series
小白学 Python 数据分析(4):Pandas (三)数据结构 DataFrame
小白学 Python 数据分析(5):Pandas (四)基础操作(1)查看数据
小白学 Python 数据分析(6):Pandas (五)基础操作(2)数据选择
引言
前面几篇我们介绍了 Pandas 的一些基础操作,有同学在后台给小编留言,纯粹的介绍 API 太无聊了,那么,小编这篇就来点有用的东西,希望大家能在以后的工作生活中都用得上。
本篇主要介绍如何将数据导入 Pandas 进行一些简单的操作。
操作的数据源嘛,就选择小编对自己博客站数据的抓取,这里小编将自己的博客数据导出成了两种格式, Excel 和 CSV ,各位同学在平常的工作生活中能接触的应该也是这两种格式。
Excel 数据导入
导入 Excel 数据主要使用到的方法是 Pandas 中的 read_excel() 。
在进行导入操作的时候,要注意文件路径,这里的文件路径可以使用相对路径也可以使用绝对路径,但是不管哪种路径最基本的是要写对。
小编先使用相对路径做个演示:
import pandas as pd
df = pd.read_excel("result_data.xlsx")
print(df)
# 输出内容
plantform read_num fans_num rank_num like_num create_date
0 cnblog 215 0 118 0 2019-11-23 23:00:10
1 juejin 177 0 -2 1 2019-11-23 23:00:03
2 csdn 1652 69 0 24 2019-11-23 23:00:02
3 cnblog 650 3 191 0 2019-11-22 23:00:15
4 juejin 272 3 -23 1 2019-11-22 23:00:02
.. ... ... ... ... ... ...
403 juejin 212 0 -1 2 2020-02-20 23:00:02
404 csdn 1602 1 0 1 2020-02-20 23:00:01
405 cnblog 19 0 41 0 2020-02-21 23:00:05
406 juejin 125 1 -4 0 2020-02-21 23:00:02
407 csdn 1475 8 0 3 2020-02-21 23:00:02
[408 rows x 6 columns]
因为小编这里的 Excel 就放在代码的同级目录,所以直接写文件名即可,接下来演示绝对路径。
由于小编的操作系统是 Windows 的操作系统,文件路径默认是使用 \ ,如 D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.xlsx ,我们在直接使用 Windows 的文件路径的时候需要在前面增加一个 r (转义符)避免路径中的 \ 被转义,如下:
import pandas as pd
df = pd.read_excel(r"D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.xlsx")
print(df)
# 输出内容
plantform read_num fans_num rank_num like_num create_date
0 cnblog 215 0 118 0 2019-11-23 23:00:10
1 juejin 177 0 -2 1 2019-11-23 23:00:03
2 csdn 1652 69 0 24 2019-11-23 23:00:02
3 cnblog 650 3 191 0 2019-11-22 23:00:15
4 juejin 272 3 -23 1 2019-11-22 23:00:02
.. ... ... ... ... ... ...
403 juejin 212 0 -1 2 2020-02-20 23:00:02
404 csdn 1602 1 0 1 2020-02-20 23:00:01
405 cnblog 19 0 41 0 2020-02-21 23:00:05
406 juejin 125 1 -4 0 2020-02-21 23:00:02
407 csdn 1475 8 0 3 2020-02-21 23:00:02
[408 rows x 6 columns]
当然,如果不想使用这个转义符 r 也行,这样需要修改下文件的路径,将所有的 \ 变成 / ,这个规则适用于其他所有的文件路径操作,示例如下:
import pandas as pd
df = pd.read_excel("D:/Development/Projects/python-learning/python-data-analysis/pandas-demo/result_data.xlsx")
print(df)
# 输出内容
plantform read_num fans_num rank_num like_num create_date
0 cnblog 215 0 118 0 2019-11-23 23:00:10
1 juejin 177 0 -2 1 2019-11-23 23:00:03
2 csdn 1652 69 0 24 2019-11-23 23:00:02
3 cnblog 650 3 191 0 2019-11-22 23:00:15
4 juejin 272 3 -23 1 2019-11-22 23:00:02
.. ... ... ... ... ... ...
403 juejin 212 0 -1 2 2020-02-20 23:00:02
404 csdn 1602 1 0 1 2020-02-20 23:00:01
405 cnblog 19 0 41 0 2020-02-21 23:00:05
406 juejin 125 1 -4 0 2020-02-21 23:00:02
407 csdn 1475 8 0 3 2020-02-21 23:00:02
[408 rows x 6 columns]
出于使用简单考虑,小编推荐直接在路径前面加 r ,剩下的文件路径直接使用 CV 大法就好。

指定导入 Sheet
我们在使用 Excel 导入的时候,除了可以指定文件路径,还可以选择导入的 Sheet ,如果不知道 Sheet 是什么的同学,建议出门左转。

在设置 Sheet 的时候,我们使用参数 sheet_name 来完成,示例如下:
import pandas as pd
df = pd.read_excel(r"D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.xlsx", sheet_name='result_data')
print(df)
# 输出结果
plantform read_num fans_num rank_num like_num create_date
0 cnblog 215 0 118 0 2019-11-23 23:00:10
1 juejin 177 0 -2 1 2019-11-23 23:00:03
2 csdn 1652 69 0 24 2019-11-23 23:00:02
3 cnblog 650 3 191 0 2019-11-22 23:00:15
4 juejin 272 3 -23 1 2019-11-22 23:00:02
.. ... ... ... ... ... ...
403 juejin 212 0 -1 2 2020-02-20 23:00:02
404 csdn 1602 1 0 1 2020-02-20 23:00:01
405 cnblog 19 0 41 0 2020-02-21 23:00:05
406 juejin 125 1 -4 0 2020-02-21 23:00:02
407 csdn 1475 8 0 3 2020-02-21 23:00:02
[408 rows x 6 columns]
如果我们要使用一个完全不存在的 Sheet 名称会发生什么事情呢?例如我们将上面的 sheet_name 修改为 aaa ,来看下:
import pandas as pd
df = pd.read_excel(r"D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.xlsx", sheet_name='aaa')
print(df)
# 输出结果
Traceback (most recent call last):
File "C:\Users\inwsy\AppData\Local\Programs\Python\Python37\lib\site-packages\xlrd\book.py", line 474, in sheet_by_name
sheetx = self._sheet_names.index(sheet_name)
ValueError: 'aaa' is not in list
During handling of the above exception, another exception occurred:
可以看到这里抛出了 ValueError 的异常,并且提示 aaa 不在列表中。
在指定 Sheet 名称的时候除了可以使用 Sheet 的具体名称,还可以使用 Sheet 的顺序,需要注意这个顺序开头是从 0 开始的。
import pandas as pd
df = pd.read_excel(r"D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.xlsx", sheet_name=0)
print(df)
# 输出结果
plantform read_num fans_num rank_num like_num create_date
0 cnblog 215 0 118 0 2019-11-23 23:00:10
1 juejin 177 0 -2 1 2019-11-23 23:00:03
2 csdn 1652 69 0 24 2019-11-23 23:00:02
3 cnblog 650 3 191 0 2019-11-22 23:00:15
4 juejin 272 3 -23 1 2019-11-22 23:00:02
.. ... ... ... ... ... ...
403 juejin 212 0 -1 2 2020-02-20 23:00:02
404 csdn 1602 1 0 1 2020-02-20 23:00:01
405 cnblog 19 0 41 0 2020-02-21 23:00:05
406 juejin 125 1 -4 0 2020-02-21 23:00:02
407 csdn 1475 8 0 3 2020-02-21 23:00:02
[408 rows x 6 columns]
如果这里指定的顺序是一个不存在的顺序,一样会抛出异常 IndexError ,这里小编就不做演示了。
指定导入行索引
我们在导入文件的时候,行索引默认是会使用从 0 开始的默认索引,如果对行索引有需求的话,可以使用 index_col 参数来设置行索引。
比如我们现在设置 create_date 这个参数作为行索引,注意参数起始从 0 开始:
import pandas as pd
df = pd.read_excel(r"D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.xlsx", sheet_name=0, index_col=5)
print(df)
# 输出结果
plantform read_num fans_num rank_num like_num
create_date
2019-11-23 23:00:10 cnblog 215 0 118 0
2019-11-23 23:00:03 juejin 177 0 -2 1
2019-11-23 23:00:02 csdn 1652 69 0 24
2019-11-22 23:00:15 cnblog 650 3 191 0
2019-11-22 23:00:02 juejin 272 3 -23 1
... ... ... ... ... ...
2020-02-20 23:00:02 juejin 212 0 -1 2
2020-02-20 23:00:01 csdn 1602 1 0 1
2020-02-21 23:00:05 cnblog 19 0 41 0
2020-02-21 23:00:02 juejin 125 1 -4 0
2020-02-21 23:00:02 csdn 1475 8 0 3
[408 rows x 5 columns]
指定导入列索引
同行索引一样,默认也是采用源数据的第一行作为列索引,同样,我们可以通过 header 进行列索引的设置, header 的默认参数为 0 ,也就是第一行,自定义可以使用其他行,将行号作为参数传入即可,我们演示一下使用第二行作为索引:
import pandas as pd
df = pd.read_excel(r"D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.xlsx", sheet_name=0, header=1)
print(df)
# 输出结果
cnblog 215 0 118 0.1 2019-11-23 23:00:10
0 juejin 177 0 -2 1 2019-11-23 23:00:03
1 csdn 1652 69 0 24 2019-11-23 23:00:02
2 cnblog 650 3 191 0 2019-11-22 23:00:15
3 juejin 272 3 -23 1 2019-11-22 23:00:02
4 csdn 2202 129 0 37 2019-11-22 23:00:01
.. ... ... ... ... ... ...
402 juejin 212 0 -1 2 2020-02-20 23:00:02
403 csdn 1602 1 0 1 2020-02-20 23:00:01
404 cnblog 19 0 41 0 2020-02-21 23:00:05
405 juejin 125 1 -4 0 2020-02-21 23:00:02
406 csdn 1475 8 0 3 2020-02-21 23:00:02
[407 rows x 6 columns]
指定导入行数
有时候,如果我们只需要了解一下这个文件中有些什么数据,那么我们就不需要导入所有的数据,可以使用 nrows 来指定导入的行数,这里我们选择导入 Excel 的前 100 行:
import pandas as pd
df = pd.read_excel(r"D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.xlsx", sheet_name=0, nrows=100)
print(df)
# 输出结果
plantform read_num fans_num rank_num like_num create_date
0 cnblog 215 0 118 0 2019-11-23 23:00:10
1 juejin 177 0 -2 1 2019-11-23 23:00:03
2 csdn 1652 69 0 24 2019-11-23 23:00:02
3 cnblog 650 3 191 0 2019-11-22 23:00:15
4 juejin 272 3 -23 1 2019-11-22 23:00:02
.. ... ... ... ... ... ...
95 csdn 1492 88 0 13 2019-10-23 23:51:37
96 cnblog 1338 2 219 0 2019-10-22 23:33:33
97 juejin 204 1 -6 6 2019-10-22 23:18:19
98 csdn 1064 61 7094 18 2019-10-22 23:18:08
99 cnblog -493 1 69 0 2019-10-21 22:38:32
[100 rows x 6 columns]
从结果的数据统计,可以看到我们成功的导入了前 100 行的数据,虽然行索引只有 99 ,是因为么我们 Excel 的头也占了一行。
指定导入列
有时候,我们的 Excel 中的列太多了,而我们处理的数据又不需要那么多列的时候,我们可以使用 usecols 来指定我们需要导入的列:
import pandas as pd
df = pd.read_excel(r"D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.xlsx", sheet_name=0, usecols=[0, 1, 2])
print(df)
# 输出结果
plantform read_num fans_num
0 cnblog 215 0
1 juejin 177 0
2 csdn 1652 69
3 cnblog 650 3
4 juejin 272 3
.. ... ... ...
403 juejin 212 0
404 csdn 1602 1
405 cnblog 19 0
406 juejin 125 1
407 csdn 1475 8
[408 rows x 3 columns]
注意这里的 usecols 的参数是一个数组,表示我们将要导入的列。
CSV 数据导入
前面我们介绍了如何导入 Excel 的数据,我们接着介绍如何导入 CSV 的数据,首先还是使用 read_csv 导入 CSV 的文件:
import pandas as pd
df = pd.read_csv(r"D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.csv")
print(df)
# 输出结果
plantform read_num fans_num rank_num like_num create_date
0 cnblog 215 0 118 0 23/11/2019 23:00:10
1 juejin 177 0 -2 1 23/11/2019 23:00:03
2 csdn 1652 69 0 24 23/11/2019 23:00:02
3 cnblog 650 3 191 0 22/11/2019 23:00:15
4 juejin 272 3 -23 1 22/11/2019 23:00:02
.. ... ... ... ... ... ...
403 juejin 212 0 -1 2 20/2/2020 23:00:02
404 csdn 1602 1 0 1 20/2/2020 23:00:01
405 cnblog 19 0 41 0 21/2/2020 23:00:05
406 juejin 125 1 -4 0 21/2/2020 23:00:02
407 csdn 1475 8 0 3 21/2/2020 23:00:02
[408 rows x 6 columns]
可以看到,和上面的 Excel 导入的数据保持一致,只是后面的时间日期类型格式化有点区别。
其余的操作和上面介绍的 Excel 是一样的,这里就不一一列举了,有一个需要注意的点是,编码格式的指定,这时我们需要设置 encoding 参数,如果不做设置,那么默认的指定格式是 utf-8 的,因为常用的格式除了 utf-8 还会有 gbk 、 gb2312 等等。
import pandas as pd
# 指定编码格式
df = pd.read_csv(r"D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.csv", encoding='utf-8')
print(df)
# 输出结果
plantform read_num fans_num rank_num like_num create_date
0 cnblog 215 0 118 0 23/11/2019 23:00:10
1 juejin 177 0 -2 1 23/11/2019 23:00:03
2 csdn 1652 69 0 24 23/11/2019 23:00:02
3 cnblog 650 3 191 0 22/11/2019 23:00:15
4 juejin 272 3 -23 1 22/11/2019 23:00:02
.. ... ... ... ... ... ...
403 juejin 212 0 -1 2 20/2/2020 23:00:02
404 csdn 1602 1 0 1 20/2/2020 23:00:01
405 cnblog 19 0 41 0 21/2/2020 23:00:05
406 juejin 125 1 -4 0 21/2/2020 23:00:02
407 csdn 1475 8 0 3 21/2/2020 23:00:02
[408 rows x 6 columns]
因为小编这里的编码格式是 utf-8 ,所以这里对编码格式的设置是 encoding='utf-8' 。
导入数据库数据
数据库有很多种,在连接数据库的时候需要使用不同的驱动,因为小编这里使用的 MySQL 数据库,所以使用的驱动为 pymsql ,在使用的事情需要先创建数据库连接。
import pymysql
con = pymysql.connect(host='',
port=,
user='',
password='',
db='',
charset='')
这里的参数需要各位自行填写,用来配置 MySQL 连接的参数。
配置好数据库连接以后,我们使用的是 read_sql 这个方法直接执行 sql 语句获取数据,完整的代码如下:
import pandas as pd
import pymysql
con = pymysql.connect(host='',
port=,
user='',
password='',
db='',
charset='')
sql = 'select * from result_data'
df = pd.read_sql(sql, con)
print(df)
# 输出结果
plantform read_num fans_num rank_num like_num create_date
0 cnblog 215 0 118 0 2019-11-23 23:00:10
1 juejin 177 0 -2 1 2019-11-23 23:00:03
2 csdn 1652 69 0 24 2019-11-23 23:00:02
3 cnblog 650 3 191 0 2019-11-22 23:00:15
4 juejin 272 3 -23 1 2019-11-22 23:00:02
.. ... ... ... ... ... ...
406 juejin 125 1 -4 0 2020-02-21 23:00:02
407 csdn 1475 8 0 3 2020-02-21 23:00:02
408 cnblog 56 0 33 0 2020-02-22 23:00:06
409 juejin 83 0 -1 0 2020-02-22 23:00:02
410 csdn 2094 10 0 4 2020-02-22 23:00:02
[411 rows x 6 columns]
这里的结果比前面的 Excel 多几行是因为时间关系,Excel 导出的时间稍微早了一点。
简单使用
当我们获取到数据以后,在来几个我们前面介绍过的简单操作。
使用 head 预览前几行数据:
print(df.head(5))
# 输出结果
plantform read_num fans_num rank_num like_num create_date
0 cnblog 215 0 118 0 2019-11-23 23:00:10
1 juejin 177 0 -2 1 2019-11-23 23:00:03
2 csdn 1652 69 0 24 2019-11-23 23:00:02
3 cnblog 650 3 191 0 2019-11-22 23:00:15
4 juejin 272 3 -23 1 2019-11-22 23:00:02
获取数据表的大小,这里使用的是 shape :
print(df.shape)
# 输出结果
(411, 6)
获取数值分布,使用 describe():
print(df.describe())
# 输出结果
read_num fans_num rank_num like_num
count 411.000000 411.000000 411.000000 411.000000
mean 521.199513 9.111922 234.632603 4.347932
std 2899.915738 19.021352 1437.427594 7.829470
min -54600.000000 -1.000000 -25.000000 0.000000
25% 83.500000 0.000000 -1.000000 0.000000
50% 288.000000 2.000000 0.000000 1.000000
75% 788.000000 7.000000 38.000000 5.000000
max 7083.000000 129.000000 21720.000000 57.000000
本次的分享先到这里了,因为最近都没写原创,本篇内容稍微长了点,希望各位同学还是能耐着性子自己写写代码,文章中相关涉及到的文件都上传代码仓库了,有需要的同学可以自行取用。
示例代码
老规矩,所有的示例代码都会上传至代码管理仓库 Github 和 Gitee 上,方便大家取用。
小白学 Python 数据分析(7):Pandas (六)数据导入的更多相关文章
- 小白学 Python 数据分析(8):Pandas (七)数据预处理
人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...
- 小白学 Python 数据分析(9):Pandas (八)数据预处理(2)
人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...
- 小白学 Python 数据分析(10):Pandas (九)数据运算
人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...
- 小白学 Python 数据分析(11):Pandas (十)数据分组
人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...
- 小白学 Python 数据分析(12):Pandas (十一)数据透视表(pivot_table)
人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...
- 小白学 Python 数据分析(13):Pandas (十二)数据表拼接
人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...
- 小白学 Python 数据分析(5):Pandas (四)基础操作(1)查看数据
在家为国家做贡献太无聊,不如跟我一起学点 Python 人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Panda ...
- 小白学 Python 数据分析(6):Pandas (五)基础操作(2)数据选择
人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...
- 小白学 Python 数据分析(15):数据可视化概述
人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...
随机推荐
- NOIP复活了
众所周知,NOIP以一种奇葩而又不可避免的方式(CSP)复活了.
- 史上最简约的vi教程,复制和粘贴
上一篇博客,讲了"新手"如何"入门"vi,解决了"两眼一抹黑"的情况.知道在vi下如何进行基本的操作,如部署在Linux下的项目,修改配置文 ...
- 关于Navicat连接oralcle出现Cannot load OCI DLL 87,126,193 ,ORA-28547等错误
navicat连接oracle数据库报ORA-28547: connection to server failed, probable Oracle Net admin error错误的解决方法 na ...
- NOI2.6 8782: 乘积最大
描述 今年是国际数学联盟确定的"2000--世界数学年",又恰逢我国著名数学家华罗庚先生诞辰90周年.在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一个好 ...
- ASP.NET MVC4 使用UEditor富文本
原帖:http://user.qzone.qq.com/369175376/infocenter?ptlang=2052 第一步:先到http://ueditor.baidu.com/webs ...
- linux pycharm 安装
Ubuntu安装之python开发 什么??公司要用Ubuntu(乌班图)?不会用??怎么进行python开发??? 乌班图操作系统下载地址:http://releases.ubuntu.com/ ...
- python基础面试集锦(51-100)
目录 51.把aaabbbcccdd这种形式的字符串压缩成a3b3c3d2的形式? 52.给你一个字符串'abc',打印出该字符串的所有排列组合? 53.执行以下代码后,x的值为? 54.对于一个非空 ...
- JDK 原生动态代理是怎么实现的 + 面试题
JDK 原生动态代理是怎么实现的 + 面试题 反射 反射机制是 Java 语言提供的一种基础功能,赋予程序在运行时自省(introspect)的能力.简单来说就是通过反射,可以在运行期间获取.检测和调 ...
- Arduino系列之pwm控制LED灯(呼吸灯)
下面我将写出最简单控制呼吸灯的方法 void setup() // { pinMode(12,OUTPUT); ...
- 技术派-常用的一些VS相关的宏名
用户宏 ConfigurationName 配置名字,通常是Debug或者Release IntDir 编译器使用的中间目录,产出obj文件 OutDir 链接器使用的输出目录 ProjectDir ...