pandas
Pandas介绍
2008年WesMcKinney开发出的库;
专门用于数据挖掘的开源python库;
以Numpy为基础,借力Numpy模块在计算方面性能高的优势;
基于matplotlib,能够简便的画图;
独特的数据结构;
相较于matplotlib和numpy
- 增强图表可读性
- 便捷的数据处理能力
- 读取文件方便
- 封装了Matplotlib、Numpy的画图和计算
pandas数据结构
Series
-
Series是一个类似于一维数组的数据结构,它能够保存任何类型的数据,比如整数、字符串、浮点数等,主要由一组数据和与之相关的索引两部分构成。
-
创建
- #导入pandas
import pandas as pd
pd.Series(data=None, index=None, dtype=None)
参数:
data:传入的数据,可以是ndarray、list等
index:索引,必须是唯一的,且与数据的长度相等。如果没有传入索引参数,则默认会自动创建一个从0-N的整数索引。
dtype:数据的类型 - 指定内容,默认索引
pd.Series(np.arange(10)) - 指定索引
pd.Series([6.7,5.6,3,10,2], index=[1,2,3,4,5]) - 通过字典数据创建
color_count = pd.Series({‘red’:100, ‘blue’:200, ‘green’: 500, ‘yellow’:1000})
- #导入pandas
-
Series的属性
- index
- values
DataFrame
-
DataFrame是一个类似于二维数组或表格(如excel)的对象,既有行索引,又有列索引
行索引,表明不同行,横向索引,叫index,0轴,axis=0
列索引,表名不同列,纵向索引,叫columns,1轴,axis=1 -
创建
- #导入pandas
import pandas as pd
pd.DataFrame(data=None, index=None, columns=None)
参数:
index:行标签。如果没有传入索引参数,则默认会自动创建一个从0-N的整数索引。
columns:列标签。如果没有传入索引参数,则默认会自动创建一个从0-N的整数索引。
- #导入pandas
-
属性
- shape形状
- index行索引
- columns列索引
- values,以array数组形式显示data
- T转置
- head(5):显示前5行内容
- tail(5):显示后5行内容
-
dataframe索引的设置
- 只能全部设置,不能单个设置
- 修改行列索引值
stu = [“学生_” + str(i) for i in range(score_df.shape[0])]
#必须整体全部修改
data.index = stu - 重设索引
reset_index(drop=False)
设置新的下标索引
drop:默认为False,不删除原来索引,如果为True,删除原来的索引值
#重置索引,drop=False
data.reset_index() - 以某列值设置为新的索引
set_index(keys, drop=True)
keys : 列索引名成或者列索引名称的列表
drop : boolean, default True.当做新的索引,删除原来的列。当设置了两个或两个以上的index索引,那么数据结构就由DataFrame变成了MultiIndex
MultiIndex
- MultiIndex是三维的数据结构;
多级索引(也称层次化索引)是pandas的重要功能,可以在Series、DataFrame对象上拥有2个以及2个以上的索引。
基本数据操作
1 索引操作
- 直接索引 – 先列后行,是需要通过索引的字符串进行获取
- loc – 先行后列,是需要通过索引的字符串进行获取
- iloc – 先行后列,是通过下标进行索引
- ix – 先行后列, 可以用上面两种方法混合进行索引
2 赋值操作
- #直接修改原来的值
data[‘close’] = 1
#或者
data.close = 1
3 排序
-
排序有两种形式,一种对于索引进行排序,一种对于内容进行排序
-
DataFrame排序
- 使用df.sort_values(by=, ascending=)
单个键或者多个键进行排序,
参数:
by:指定排序参考的键
ascending:默认升序
ascending=False:降序
ascending=True:升序data.sort_values(by=“open”,ascending=True).head() # 按照多个键进行排序
data.sort_values(by=[‘open’, ‘high’]) - 使用df.sort_index给索引进行排序
这个股票的日期索引原来是从大到小,现在重新排序,从小到大
#对索引进行排序
data.sort_index()
- 使用df.sort_values(by=, ascending=)
-
Series排序
- 使用series.sort_values(ascending=True)进行排序
- 使用series.sort_index()进行排序
DataFrame运算
1 算术运算
-
add(other)
- data[‘open’].add(1)
-
sub(other)’
2 逻辑运算
-
2.1 逻辑运算符号
例如筛选data[“open”] > 23的日期数据
data[“open”] > 23返回逻辑结果- #逻辑判断的结果可以作为筛选的依据
data[data[“open”] > 23].head() - 完成多个逻辑判断,
data[(data[“open”] > 23) & (data[“open”] < 24)].head()
- #逻辑判断的结果可以作为筛选的依据
-
逻辑运算函数
query(expr)
expr:查询字符串
通过query使得刚才的过程更加方便简单
data.query(“open<24 & open>23”).head()
isin(values)
例如判断’open’是否为23.53和23.85
#可以指定值进行一个判断,从而进行筛选操作
data[data[“open”].isin([23.53, 23.85])]
3 统计运算
- 3.1 describe
综合分析: 能够直接得出很多统计结果,count, mean, std, min, max 等
#计算平均值、标准差、最大值、最小值
data.describe()
-
3.2 统计函数
- count Number of non-NA observations
sum Sum of values
mean Mean of values
median Arithmetic median of values
min Minimum
max Maximum
mode Mode
abs Absolute Value
prod Product of values
std Bessel-corrected sample standard deviation
var Unbiased variance
idxmax compute the index labels with the maximum
idxmin compute the index labels with the minimum
- count Number of non-NA observations
-
3.3 累计统计函数
- 函数 作用
cumsum 计算前1/2/3/…/n个数的和
cummax 计算前1/2/3/…/n个数的最大值
cummin 计算前1/2/3/…/n个数的最小值
cumprod 计算前1/2/3/…/n个数的积
- 函数 作用
4 自定义运算
- apply(func, axis=0)
func:自定义函数
axis=0:默认是列,axis=1为行进行运算
定义一个对列,最大值-最小值的函数
data[[‘open’, ‘close’]].apply(lambda x: x.max() - x.min(), axis=0)
5 pandas画图工具
- pandas.DataFrame.plot
DataFrame.plot(kind=‘line’)
kind : str,需要绘制图形的种类
‘line’ : line plot (default)
‘bar’ : vertical bar plot
‘barh’ : horizontal bar plot
‘hist’ : histogram
‘pie’ : pie plot
‘scatter’ : scatter plot - pandas.Series.plot
6 文件读取与存储
-
CSV
- read_csv
pandas.read_csv(filepath_or_buffer, sep =’,’, usecols )
filepath_or_buffer:文件路径
sep :分隔符,默认用","隔开
usecols:指定读取的列名,列表形式 - to_csv
DataFrame.to_csv(path_or_buf=None, sep=’, ’, columns=None, header=True, index=True, mode=‘w’, encoding=None)
- read_csv
path_or_buf :文件路径
sep :分隔符,默认用","隔开
columns :选择需要的列索引
header :boolean or list of string, default True,是否写进列索引值
index:是否写进行索引
mode:‘w’:重写, ‘a’ 追加
-
HDF5
- read_hdf与to_hdf
HDF5文件的读取和存储需要指定一个键,值为要存储的DataFrame
pandas.read_hdf(path_or_buf,key =None,** kwargs)
从h5文件当中读取数据
path_or_buffer:文件路径
key:读取的键
return:Theselected object
DataFrame.to_hdf(path_or_buf, key, \kwargs)
- read_hdf与to_hdf
-
JSON
- read_json
pandas.read_json(path_or_buf=None, orient=None, typ=‘frame’, lines=False) - to_json
DataFrame.to_json(path_or_buf=None, orient=None, lines=False)
将Pandas 对象存储为json格式
path_or_buf=None:文件地址
orient:存储的json形式,{‘split’,’records’,’index’,’columns’,’values’}
lines:一个对象存储为一行
- read_json
7 缺失值处理
- isnull、notnull判断是否存在缺失值【知道】
np.any(pd.isnull(movie)) # 里面如果有一个缺失值,就返回True
np.all(pd.notnull(movie)) # 里面如果有一个缺失值,就返回False - dropna删除np.nan标记的缺失值【知道】
movie.dropna() - fillna填充缺失值【知道】
movie[i].fillna(value=movie[i].mean(), inplace=True) - replace替换具体某些值【知道】
wis.replace(to_replace="?", value=np.NaN)
8离散化处理
- 为什么要离散化
连续属性离散化的目的是为了简化数据结构,数据离散化技术可以用来减少给定连续属性值的个数。离散化方法经常作为数据挖掘的工具。 - 什么是数据的离散化
连续属性的离散化就是在连续属性的值域上,将值域划分为若干个离散的区间,最后用不同的符号或整数 值代表落在每个子区间中的属性值。 - pd.qcut(data, q):
对数据进行分组将数据分组,一般会与value_counts搭配使用,统计每组的个数
series.value_counts():统计分组次数 - onehot编码把每个类别生成一个布尔列,这些列中只有一列可以为这个样本取值为1.其又被称为热编码。
pandas.get_dummies(data, prefix=None)
data:array-like, Series, or DataFrame
prefix:分组名字
9合并
- pd.concat实现数据合并
pd.concat([data1, data2], axis=1)
按照行或列进行合并,axis=0为列索引,axis=1为行索引 - pd.merge
pd.merge(left, right, how=‘inner’, on=None)
可以指定按照两组数据的共同键值对合并或者左右各自
left: DataFrame
right: 另一个DataFrame
on: 指定的共同键
how:按照什么方式连接 - Merge method SQL Join Name Description
left LEFT OUTER JOIN Use keys from left frame only
right RIGHT OUTER JOIN Use keys from right frame only
outer FULL OUTER JOIN Use union of keys from both frames
inner INNER JOIN Use intersection of keys from both frames
10 交叉表与透视表
- 交叉表:交叉表用于计算一列数据对于另外一列数据的分组个数(用于统计分组频率的特殊透视表)
pd.crosstab(value1, value2) - 透视表:透视表是将原有的DataFrame的列分别作为行索引和列索引,然后对指定的列应用聚集函数,指定某一列对另一列的关系
data.pivot_table()
DataFrame.pivot_table([], index=[])
11分组聚合
- DataFrame.groupby(key, as_index=False)
key:分组的列数据,可以多个
XMind: ZEN - Trial Version