• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

数据挖掘2022数据挖掘:Pandas库相关使用

武飞扬头像
熊凯瑞
帮助1

一、概念

1、介绍

pandas是专门用于数据挖掘的开源python库,以Numpy为基础,借力Numpy模块在计算方面性能高的优势,同时基于matplotlib,能够简便的画图,具有独特的数据结构。

2、Pandas的优点

便捷的数据处理能力
读取文件方便
封装了Matplotlib、Numpy的画图和计算

3、软件推荐(Jupyter Notebook

使用Jupyter Notebook,是IPython的加强网页版,一个开源Web应用程序,是一款程序员和科学工作者的编程/文档/笔记/展示软件。
.ipynb文件格式是用于计算型叙述的JSON文档格式的正式规范

4、软件下载网址以及参考文档

跳转链接:Jupyter官网
对于新手而言一般用Anacomda上的Jupyter,如果不知道如何安装Anaconda软件的话,可以参考我写的Anaconda tensorflow最有实效总结版(重装6次的血泪总结)

二、基础知识

1、DataFrame属性和方法

1.1 结构

DataFrame可以看成既有行索引,又有列索引的二维数组

(1)行索引

表明不同行,横向索引,叫index

(2)列索引

表明不同列,纵向索引,叫columns

1.2 常用属性

(1)shape
data.shape

结果
学新通

(2)index

DataFrame的行索引列表

data.index

结果
学新通

(3)columns

DataFrame的列索引列表

data.columns

结果
学新通

(4)values

直接获取其中array的值

data.values

结果
学新通

(5)T

转置

data.T

结果

学新通

1.3 常用方法

(1)head()

展示前几行的数据

data.head(3)

结果
学新通

(2)tail()

展示后几行的数据

data.tail(3)

结果
学新通

2、修改索引

2.1 修改行列索引值

不能单独修改某一个索引,只能整体修改索引

stock_ = ["序号_{}".format(i) for i in range(10)]

data.index = stock_

结果
学新通

2.2 重设索引

data.reset_index()

结果
学新通

如果

data.reset_index(drop = True)

结果
学新通

2.3 以某列值设置为新的索引

(1)语法
set_index(key, drop=True)
keys:列索引名称或者列索引名称的列表
drop: boolean, default True当做新的索引,删除原来的列
(2)以月份设置新的索引
# 以月份设置新的索引
new_df = df.set_index("month",drop=True)

结果
学新通

(3)设置多个索引,以年和月份
# 设置多个索引,以年和月份
new_df2 = df.set_index(["year","month"])

结果
学新通

3、MultiIndex与Panel

3.1 MultiIndex

多级或分层索引对象

index属性
   names: levels的名称
   levels: 每个level的元组值

例一

new_df2.index.names

结果
学新通

例二

new_df2.index.levels

结果
学新通

3.2 Panel

(1)概念

存储三维结构的容器
Pandas从版本0.20.0开始弃用,在新版本中会报错:推荐使用表示3D数据的方法是DataFrame上的MultiIndex方法

(2)语法
pandas.Panel(data=None, items=None, major_axis=None, minor_axis=None, copy=False, dtype=None)

样例代码

p = pd.Panel(np.arange(24).reshape(4,3,2),
            items=list('ABCD'),
            major_axis=pd.date_range('20130101', periods=3),
            minor_axis=['first','second'])

如果一定要使用,则下载指定版本,可能有用:python3下具有Panel()的pandas版本pandas 0.24.2。(我看网上有人下载这个版本有Panel(),不知道是不是真的)

4、Series

4.1 概念

带索引的一维数组(Series结构只有行索引)

4.2 创建Series

通过已有数据创建

(1)指定内容,默认索引
pd.Series(np.arange(10))

结果
学新通

(2)指定索引
# 指定索引
pd.Series([6.7,5.6,3,10,2], index=[1,2,3,4,5])

结果
学新通

(3)通过字典数据创建
# 通过字典数据创建
pd.Series({'red':100,'blue':200,'green':500, 'yellow':1000})

结果
学新通

4.3 属性

(1)index
sr.index

结果
学新通

(2)values
sr.values

结果
学新通

4.4 总结

DataFrame是Series的容器
Panel是DataFrame的容器

三、基本数据操作

1、索引操作

1.1 基础数据整理

# 读取文件
data = pd.read_csv("./day/day.csv")

# 删除一些列
data = data.drop(["ma5", "ma10", "ma20"], axis=1)

1.2 直接使用行列索引(先列后行)

data["列名"]["行名"]

例如

data["column"]["row"]

1.3 按名字索引

data.loc["行名"]["列名"]

data.loc["行名","列名"]

例如

data.loc["row"]["column"]

data.loc["row","column"]

1.4 按数字索引

data.iloc[1,0]

2、赋值操作

# 对DataFrame当中的close列进行重新赋值为1
# 直接修改原来的值
data['close'] = 1
# 或者
data.close = 1

3、排序

3.1 内容排序

使用df.sort_values(key=, ascending=) 对内容进行排序
单个键或者多个键进行排序,默认升序
ascending = False: 降序
ascending = True: 升序

# 按某一列进行降序
data = data.sort_values(by='列名', ascending = False)

# 按某几列进行降序
data = data.sort_values(by=['列名1','列名2'], ascending = False)

3.2 索引排序

使用df.sort_index对索引进行排序(从小到大)

data.sort_index()

四、DataFrame运算

1、算术运算

1.1 加法

# 该列所有数字加3
data['列名'].add(3).head()

1.2 减法

# 全部都减100
data.sub(100).head()

2、逻辑运算

2.1 逻辑运算符号 >

# 筛选大于2的数据
data[data['列名'] > 2]

2.2 逻辑运算符 &

# 完成一个多逻辑判断,筛选列1大于2且列2大于15
data[(data['列名1'] > 2)&(data['列名2'] > 15)]

2.3 逻辑运算函数

(1)query(expr) expr: 查询字符串

根据条件进行查询

# 完成一个多逻辑判断,筛选列1大于2且列2大于15
data.query("列名1 > 2 & 列名2 > 15")
(2)isin(values)

判断是否存在

data["列名"].isin({4.1,2.3})

3、统计运算

3.1 describe()

综合分析:能够直接得出很多统计结果:count,mean,std,min,max等

# 统计结果
data.describe()

3.2 max()

获取最大值

data.max()

3.3 获取最大值的位置

data.idxmax()

3.4 累计统计函数

data["列名1"].cumsum()

4、自定义运算

apply(func, axis=0)
func: 自定义函数
axis=0: 默认是列,axis=1 为行进行运算

# 定义一个队列,最大值-最小值的函数
data[['open','close']].apply(lambda x: x.max() - x.min(), axis=0)

五、文件的读取与存储

1、CSV文件

1.1 读取csv文件(read_csv)

pandas.read_csv(filepath_or_buffer, sep=‘,’, delimiter = None)
filepath_or_buffer:文件路径
usecols:指定读取的列名,列表形式
names:给数据添加列名

# csv文件里有列名
data = pd.read_csv("./day/day.csv", usecols=['open', 'high'])

# csv文件里没有列名
data = pd.read_csv("./day/day.csv", names=["open", "high"])

1.2 写入csv文件(to_csv)

DataFrame.to_csv(path_or_buf=None, Sep=‘,’,Columns=None,header=True,index=True, index_label=None, mode=‘w’, encoding=None)
path_or_buf: 文件路径
columns: 增加列名
mode: ‘w’:重写,‘a’ 追加
index: 是否写进行索引

data.to_csv("test.csv",columns=["open"], index=False)

2、HDF5文件(二进制文件)

HDF5文件的读取和存储需要指定一个键,值为要存储的DataFrame

2.1 读取HDF5文件(read_hdf)

pandas.read_hdf(path_or_buf, key=None, **kwargs)
从h5文件当中读取数据
path_or_buffer: 文件路径
key: 读取的键
mode: 打开文件的模式
return: Theselected object

data = pd.read_hdf("./day/day_data.h5")

2.2 存储成HDF5文件

存储时需要指定键,如果反复存储时指定了多个键,则读取时,需要指明是哪个键

data.to_hdf("test.h5", key="close")

指定了多个键,读取时,指明键

data.read_hdf("test.h5", key="close")

2.3 拓展

(1)HDF5在存储是支持压缩,使用方式是blosc,这个是速度最快的,也是pandas默认支持的。
(2)使用压缩可以提高磁盘利用率,节省空间。
(3)HDF5还是跨平台的,可以轻松迁移到hadoop上面。

3、JSON

Json是常用的数据交换格式。

3.1 读取JSON文件(read_json)

pandas.read_json(path_or_buf=None, orient = None, typ = ‘frame’, lines=False)
orient: 告诉API读取的数据采用什么格式(一般都用records)
lines: 按照每行读取json对象
typ:指定转换成的对象类型series或者dataframe

sa = pd.read_json("data.json", orient="records", lines=True)

3.2 存储JSON文件(to_json)

sa.to_json("data.json", orient="records", lines=True)

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfikcek
系列文章
更多 icon
同类精品
更多 icon
继续加载