CONTENTS
一、Pandas 简介
-
pandas 或 Python Data Analysis Library 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。
-
pandas 的一个简单使用(如使用pandas 读入一个excel 工作表)
import numpy as np
import pandas as pd
pf = pd.read_excel(r'C:\Users\YANG\Desktop\joyful-pandas-master\data\table.xlsx')
print(pf.head()) # 输出工作表的首 5 行
'''
School Class ID Gender Address Height Weight Math Physics
0 S_1 C_1 1101 M street_1 173 63 34.0 A+
1 S_1 C_1 1102 F street_2 192 73 32.5 B+
2 S_1 C_1 1103 M street_2 186 82 87.2 B+
3 S_1 C_1 1104 F street_2 167 81 80.4 B-
4 S_1 C_1 1105 F street_4 159 64 84.8 B+
'''
二、基本数据结构
- Series:一维数组,与Numpy中的一维array类似。二者与Python基本的数据结构List也很相近,其区别是:List中的元素可以是不同的数据类型,而Array和Series中则只允许存储相同的数据类型,这样可以更有效的使用内存,提高运算效率。
1)创建一个 Series
Series 就如同列表一样,一系列数据,每个数据对应一个索引值。像是“竖起来”的 list
s = pd.Series([1, 2, 3])
print(s)
'''
0 1
1 2
2 3
dtype: int64
'''
2) Series 的属性
以下两个属性依次可以显示 Series 对象的数据值和索引:
print(s.values)
# [1 2 3]
print(s.index)
# RangeIndex(start=0, stop=3, step=1)
列表的索引只能是从 0 开始的整数,Series 数据类型在默认情况下,其索引也是如此。不过,区别于列表的是,Series 可以自定义索引
s = pd.Series([1, 2, 3], index=list('abc'))
print(s)
'''
a 1
b 2
c 3
dtype: int64
'''
访问某个元素
print(s['a']) # 1
- DataFrame: 是一种二维的数据结构,非常接近于电子表格或者类似 mysql 数据库的形式。它的竖行称之为 columns,横行跟前面的 Series 一样,称之为 index,也就是说可以通过 columns 和 index 来确定一个主句的位置
1) 创建一个DataFrame
定义一个 DataFrame 对象的常用方法——使用 dict 定义。
df = pd.DataFrame({'col1':list('abcde'), 'col2':range(5, 10), 'col3':[1.3,2.5,3.6,4.6,5.8]})
'''
col1 col2 col3
0 a 5 1.3
1 b 6 2.5
2 c 7 3.6
3 d 8 4.6
4 e 9 5.8
'''
字典的“键”(‘col1’,‘col2’,‘col3’)就是 DataFrame 的 columns 的值(名称),字典中每个“键”的“值”是一个列表,它们就是那一竖列中的具体填充数据。上面的定义中没有确定索引,所以,按照惯例(Series 中已经形成的惯例)就是从 0 开始的整数。从上面的结果中很明显表示出来,这就是一个二维的数据结构。(columns 的顺序没有规定,就如同字典中键的顺序一样,但是在 DataFrame 中,columns 有一个明显不同,就是它的顺序是可以被规定)
2) DataFrame 的属性
① 从DataFrame取出一列为Series
print(type(df['col1'])) # <class 'pandas.core.series.Series'>
print(df['col1']) # 取出第一列
'''
0 a
1 b
2 c
3 d
4 e
Name: col1, dtype: object
'''
② 其它
print(df.index) # RangeIndex(start=0, stop=5, step=1)
print(df.columns) # Index(['col1', 'col2', 'col3'], dtype='object')
print(df.shape) # (5, 3)
print(df.values)
'''
[['a' 5 1.3]
['b' 6 2.5]
['c' 7 3.6]
['d' 8 4.6]
['e' 9 5.8]]
'''
嗯?:
① df.rename() 支持修改 列名与索引(即行名),若不对 inplace 参数进行设置,则返回一个新的变量;若设置 inplace=True 后会直接在原 DataFrame 中改动
②列的删除:drop 方法、del 方法与 df.rename()类似,而 pop方法直接在原来的DataFrame上操作,但且返回被删除的列
③列的添加:可使用assign方法,如 df[‘B’]=list(‘abc’) 但若索引(行名)曾被修改过,则添加后的该Series不具索引性,添加的元素由索引对齐特性直接显示为 NaN,assign方法会生成一个新变量
④ Series 可转换为 DataFrame,若 Series 中不设置 name,则转过来的 DataFrame 中的列名 默认从 0 开始
⑤ Series 中的mean函数与 DataFrame 中的mean函数 太不一样
三、题题题…
-
Series和DataFrame有哪些常见属性和方法?
答: 常见的属性就是 值,索引,类型,列名,行名
方法:可多了 -
value_counts会统计缺失值吗?
答: value_counts默认不统计缺失值,设置参数dropna=False时会统计缺失值 -
如果有多个索引同时取到最大值,idxmax会返回所有这些索引吗?如果不会,那么怎么返回这些索引?
答:只会返回第一个最大值的索引,若要返回多个最大值的索引,可以利用找到的第一个最大值的索引,先读取该最大值,再利用最大值反过来找索引 -
df.mean(axis=1)是什么意思?它与df.mean()的结果一样吗?问题四提到的函数也有axis参数吗?怎么使用?
答:不一样,df.mean() 默认参数axis=0 计算的是列的平均值,而 df.mean(axis=1) 计算的行的平均值 -
对值进行排序后,相同的值次序由什么决定?
答 :若设置了两个值排序参数,则有由第二个参数觉得;若无,则有索引决定 -
Pandas中为各类基础运算也定义了函数,比如s1.add(s2)表示两个Series相加,但既然已经有了’+’,是不是多此一举?
答: 你开心就好 -
如果DataFrame某一列的元素是numpy数组,那么将其保存到csv在读取后就会变成字符串,怎么解决?
答:使用强制类型转换 如 astyp()
【练习一】现有一份关于美剧《权力的游戏》剧本的数据集,请解决以下问题:
(a)在所有的数据中,一共出现了多少人物?
答:564个, 利用名字的唯一值统计人物个数
pf = pd.read_csv(r'C:\Users\YANG\Desktop\joyful-pandas-master\data\Game_of_Thrones_Script.csv')
print(pf['Name'].nunique()) # 564
剩下的,皆不会