声明:此文只是对《对比excel,轻松学习python数据分析》这本书的读书笔记,文章中的代码均来源于书中,仅以知识分享为用途,后续我会继续支持作者,也会继续读完这本书,如有侵权,请留言我删除
获取数据
导入数据主要使用的是pandas里的read_x()方法,x表示待导入的文件
导入.xlsx文件
# 导入指定文件路径的文件
df = pd.read_excel(r'C:\Users\GQ\Desktop\dir\text.xlsx') # 这里注意使用转义字符
print(df)
编号 年龄 性别 注册时间
0 A1 27 男 2017-10-19
1 A2 43 女 2018-03-03
2 A3 19 男 2007-09-03
3 A4 35 女 2019-05-21
- 指定导入哪个Sheet
.xlsx格式的文件可以有多个Sheet,可以通过具体的Sheet名字来读取
df = pd.read_excel(r'C:\Users\GQ\Desktop\dir\text.xlsx', sheet_name='Sheet2')
print(df)
测试1 测试2 测试3
0 1 2 3
1 1 2 3
2 1 2 3
也可以传入Sheet的顺序来读取,默认从0开始计数
df = pd.read_excel(r'C:\Users\GQ\Desktop\dir\text.xlsx', sheet_name=0)
print(df)
编号 年龄 性别 注册时间
0 A1 27 男 2017-10-19
1 A2 43 女 2018-03-03
2 A3 19 男 2007-09-03
3 A4 35 女 2019-05-21
指定行索引
导入本地文件,行索引默认是从0开始的,也可以通过设置index_col参数来设置
df = pd.read_excel(r'C:\Users\GQ\Desktop\dir\text.xlsx', sheet_name=0, index_col=1)
# 这里可以通过改变参数值来观察结果
# index_col表示.xlsx文件中的第几列做行索引,默认从0开始计数
print(df)
编号 性别 注册时间
年龄
27 A1 男 2017-10-19
43 A2 女 2018-03-03
19 A3 男 2007-09-03
35 A4 女 2019-05-21
指定列索引
将本地文件导入DataFrame时,默认使用源数据表的第一行作为列索引,也可以通过设置header参数来设置列索引。header参数值默认为0,即用第一行为列索引:也可以是其他行,只需要传入具体的那一行即可,也可以使用默认从0开始的数作为列索引,一下通过修改三次header的值,感受一下输出结果的不同
df = pd.read_excel('text.xlsx', sheet_name=0, header=0)
print(df)
编号 年龄 性别 注册时间
0 A1 54 男 2017-01-05
1 A2 20 女 2017-02-03
2 A3 10 女 2017-03-06
3 A4 35 男 2017-04-08
df = pd.read_excel('text.xlsx', sheet_name=0, header=1)
print(df)
A1 54 男 2017-01-05
0 A2 20 女 2017-02-03
1 A3 10 女 2017-03-06
2 A4 35 男 2017-04-08
df = pd.read_excel('text.xlsx', sheet_name=0, header=None)
print(df)
0 1 2 3
0 编号 年龄 性别 注册时间
1 A1 54 男 2017-01-05 00:00:00
2 A2 20 女 2017-02-03 00:00:00
3 A3 10 女 2017-03-06 00:00:00
4 A4 35 男 2017-04-08 00:00:00
指定导入列
当本地文件列数太多,而我们又不需要那么多列时,可以通过设置usecols参数来指定要导入的列
df = pd.read_excel('text.xlsx', usecols=2)
# usecols指定的数就是从第一列开始,打印到指定数结束,这里别忘了,计算机是从0开始的
print(df)
编号 年龄 性别
0 A1 54 男
1 A2 20 女
2 A3 10 女
3 A4 35 男
当然,也可以给usecols传入一个列表指定,就像切片一样,但是这里切的左右都有,都会输出打印
df = pd.read_excel('text.xlsx', usecols=[1, 2])
print(df)
年龄 性别
0 54 男
1 20 女
2 10 女
3 35 男
导入.csv文件
与导入xlsx文件差不多,python导入csv文件的方法是read_csv()
导入文件
df = pd.read_csv('text2.csv', encoding='utf-8')
print(df)
两者操作差距不大,都是指定参数就可以,我电脑上显示不兼容,因为平时一般用的都是wps,所以这个问题暂时就不解决,直接跳过(嘿嘿,原谅我又偷懒了)
导入.txt文件
在Excel中,可以通过菜单栏的数据–获取外部数据–自文本,导入我们需要的txt文件
在Python中使用read_table()方法, read_table()是将利用分隔符分开的文件导入DataFrame的通用函数。它不仅可以导入txt文件,也可以导入csv文件
df = pd.read_table('text2.txt')
print(df)
编号 年龄 性别 注册时间
A1 54 男 2017-01-05
A2 20 女 2017-02-03
A3 10 女 2017-03-06
A4 35 男 2017-04-08
熟悉数据
利用head预览前几行
当数据表中中包含数据行数过多时,而我们又想看一下每一列都是什么样的数据时,就可以把数据表中前几行数据显示出来查看。
在python中,当一个文件导入后,可以用head()方法来控制要显示哪些行,只需要在head后面的 括号中输入要展示行数即可,默认展示前5行
df = pd.read_csv('train-pivot.csv', encoding='GBK')
print(df)
用户ID 客户分类 区域 是否省会 7月销量 8月销量 9月销量
0 59224 A类 一线城市 是 6 20 0
1 55295 B类 三线城市 否 37 27 35
2 46035 A类 二线城市 是 8 1 8
3 2459 C类 一线城市 是 7 8 14
4 22179 B类 三线城市 否 9 12 4
# 总共就5行数据,我就不单独打印head()方法了
df = pd.read_csv('train-pivot.csv', encoding='GBK')
print(df.head(2))
用户ID 客户分类 区域 是否省会 7月销量 8月销量 9月销量
0 59224 A类 一线城市 是 6 20 0
1 55295 B类 三线城市 否 37 27 35
利用shape获取数据表的大小
在python中获取数据表的行,列数利用的是shape方法
df = pd.read_csv('train-pivot.csv', encoding='GBK')
print(df.shape)
(6, 7)
shape方法会以元组的形式返回行,列数,上面代码中的(6,7)代表df中有6行7列数据。这里需要注意的是,python中利用shape方法获取行数和列数时不会把行索引和列索引计算在内,而Excel中是把行索引和列索引计算在内的
利用info获取数据类型
熟悉数据的第二点就是看一下数据类型,不同的数据类型的分析思路是不一样的,比如数值类型的数据可以求平均值,但是字符串类型的数据就不可以
在Excel中,选中数据表的文本框,选项卡工具栏就会出现数据类型
在python中我们可以利用info()方法查看数据表中的数据类型,而且不需要一列一列的查看,在调用info()方法以后就会输出整个列表中所有的数据类型。
df = pd.read_csv('train-pivot.csv', encoding='GBK')
print(df.info())
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 6 entries, 0 to 5
Data columns (total 7 columns):
用户ID 6 non-null int64
客户分类 6 non-null object
区域 6 non-null object
是否省会 6 non-null object
7月销量 6 non-null int64
8月销量 6 non-null int64
9月销量 6 non-null int64
dtypes: int64(4), object(3)
memory usage: 464.0+ bytes
通过info()方法可以看出表df的行索引index是0-5,总共7columns,分别是用户ID,客户分类,区域(这三者是object类型),7月销量,8月销量,9月销量(这三者是int64类型)共占用内存464bytes
利用describe获取数值分布情况
熟悉数据的第三点就是掌握数值得分布情况,即均值是多少,最值是多少,方差及分位数分别是多少
在Excel中计算数据可以在选项卡功能中完成,这里不再赘述(书上有写)
在python中只需要利用describe()方法就可以获得所有数值类型字段的分布值
df = pd.read_csv('train-pivot.csv', encoding='GBK')
print(df.describe())
用户ID 7月销量 8月销量 9月销量
count 6.000000 6.000000 6.000000 6.000000
mean 34624.833333 18.166667 14.666667 19.333333
std 22350.565527 16.630294 9.458682 21.369761
min 2459.000000 6.000000 1.000000 0.000000
25% 22273.500000 7.250000 9.000000 5.000000
50% 34296.000000 8.500000 16.000000 11.000000
75% 52980.000000 30.000000 20.000000 29.750000
max 59224.000000 42.000000 27.000000 55.000000