前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Pandas知识点-DataFrame数据结构介绍

Pandas知识点-DataFrame数据结构介绍

作者头像
Python碎片公众号
发布2021-03-18 14:38:12
2.3K0
发布2021-03-18 14:38:12
举报

一、Pandas简介和安装

Pandas是Python中用于数据处理和数据分析的开源库,2008年由金融数据分析师Wes McKinney开发。开发Pandas的初衷是为了方便进行金融数据分析,现在Pandas的功能越来越丰富,应用范围也越来越广,几乎所有需要做数据处理的地方都可以派上用场。

Pandas基于numpy和matplotlib开发,既具有numpy的高性能数据处理能力,也具有matplotlib的绘图能力。此外,Pandas对numpy和matplotlib的一些方法进行了更高层的封装和扩展,使用起来更方便和快捷,功能也更加强大。

Pandas是第三方库,安装命令如下:

代码语言:javascript
复制
pip install pandas -i https://pypi.tuna.tsinghua.edu.cn/simple

从本文开始,我会用多篇文章来介绍Pandas的知识点。

二、初始数据准备

Pandas最初是用于金融数据分析的,所以我先获取了一份股票数据(贵州茅台的历史交易数据)。数据来源于网易财经,可以直接下载(能直接下载就不要考虑爬虫了,目的是拿到数据,爬虫还要处理很多反爬)。

数据获取步骤:

1. 进入网易财经首页,站内搜索“贵州茅台”或其股票代码“600519”。

2. 进入贵州茅台的的个股行情页面,向下滚动到“资金流向”显示栏,然后点击右上角的“更多”。

3. 进入资金流向的详情页面后,点击“历史交易数据”,然后点击“下载数据”,即可下载贵州茅台的历史交易数据。其他股票同理。

最终获取数据的链接为:http://quotes.money.163.com/trade/lsjysj_600519.html#01b07

下载下来的数据是一个.csv格式的文本,数据无需处理,可以直接使用,也可以直接用办公软件Excel打开。为了方便后面的代码调用,下载完成后将这个.csv文件拷贝到代码的同级目录下。

三、DataFrame数据结构介绍

1. Pandas读取csv文件中的数据

代码语言:javascript
复制
# coding=utf-8
import pandas as pd


data = pd.read_csv("600519.csv", encoding='gbk')
print(data)
print(type(data))

下载的数据文件是600519.csv,将此文件放到代码同级目录下,读取的数据结果如下图。下载的数据编码格式是'gbk',所以读取数据时也要指定用'gbk',否则会报错。

使用type()函数打印数据的类型,数据类型为DataFrame。说明刚从csv文件中读取出来的数据是一个DataFrame数据。

代码语言:javascript
复制
<class 'pandas.core.frame.DataFrame'>

2. DataFrame数据结构的构成

DataFrame数据是Pandas中的基本数据结构,同时具有行索引(index)和列索引(columns),看起来与Excel表格相似。

DataFrame数据由三个部分组成,行索引、列索引、数据。pandas读取DataFrame数据时,如果数据行数和列数很多,会自动将数据折叠,中间的显示为“...”。

与numpy中的ndarray相比,ndarray只有数据部分,没有行索引和列索引,缺少对数据的描述和说明,没有赋予数据实际意义。DataFrame有行索引和列索引,且支持多种索引操作,使数据更贴近真实场景,处理更方便。

四、DataFrame的基本属性

1. DataFrame的行索引index和列索引columns

代码语言:javascript
复制
data = pd.read_csv("600519.csv", encoding='gbk')
print(data.index)
print(data.columns)
代码语言:javascript
复制
RangeIndex(start=0, stop=4726, step=1)
Index(['日期', '股票代码', '名称', '收盘价', '最高价', '最低价', '开盘价', '前收盘', '涨跌额', '涨跌幅',
       '换手率', '成交量', '成交金额', '总市值', '流通市值'],
      dtype='object')

2. DataFrame中的数据values

代码语言:javascript
复制
data = pd.read_csv("600519.csv", encoding='gbk')
print(data.values)

代码语言:javascript
复制
[['2021-02-19' "'600519" '贵州茅台' ... 14525164525.0 3090246588000.0
  3090246588000.0]
 ['2021-02-18' "'600519" '贵州茅台' ... 16704135269.0 3104064763800.0
  3104064763800.0]
 ['2021-02-10' "'600519" '贵州茅台' ... 15675929714.0 3267370477800.0
  3267370477800.0]
 ...
 ['2001-08-29' "'600519" '贵州茅台' ... 194689620.0 9095000000.0 2601170000.0]
 ['2001-08-28' "'600519" '贵州茅台' ... 463463143.0 9215000000.0 2635490000.0]
 ['2001-08-27' "'600519" '贵州茅台' ... 1410347179.0 8887500000.0
  2541825000.0]]

values只获取DataFrame中的数据,是一个numpy.ndarray对象,即多维数组。

3. DataFrame的形状shape和转置.T

代码语言:javascript
复制
data = pd.read_csv("600519.csv", encoding='gbk')
print("形状:", data.shape)
data2 = data.T
print("转置后形状:", data2.shape)
代码语言:javascript
复制
形状:(4726, 15)
转置后形状:(15, 4726)

4. DataFrame中的数据类型

代码语言:javascript
复制
data = pd.read_csv("600519.csv", encoding='gbk')
print(data.dtypes)
代码语言:javascript
复制
日期       object
股票代码     object
名称       object
收盘价     float64
最高价     float64
最低价     float64
开盘价     float64
前收盘     float64
涨跌额      object
涨跌幅      object
换手率     float64
成交量       int64
成交金额    float64
总市值     float64
流通市值    float64
dtype: object

与numpy中的ndarray相比,同一个ndarray中的数据类型是一致的,而DataFrame中的每一列数据可以是不同类型的数据。

五、DataFrame部分显示

本文中的数据有四千多行,很多时候,没有必要所有行都显示,只显示一部分即可。

Pandas中实现了两个常用的部分显示方法,head()和tail()。

head(n=5): 显示前5行数据。n可以根据需要传入,如果不传值默认显示5行。

tail(n=5): 显示后5行数据。n同head()。

代码语言:javascript
复制
data = pd.read_csv("600519.csv", encoding='gbk')
print(data.head())
代码语言:javascript
复制
   日期     股票代码    名称  ...          成交金额           总市值          流通市值
0  2021-02-19  '600519  贵州茅台  ...  1.452516e+10  3.090247e+12  3.090247e+12
1  2021-02-18  '600519  贵州茅台  ...  1.670414e+10  3.104065e+12  3.104065e+12
2  2021-02-10  '600519  贵州茅台  ...  1.567593e+10  3.267370e+12  3.267370e+12
3  2021-02-09  '600519  贵州茅台  ...  7.972930e+09  3.085762e+12  3.085762e+12
4  2021-02-08  '600519  贵州茅台  ...  8.420759e+09  2.975681e+12  2.975681e+12
[5 rows x 15 columns]

六、DataFrame的索引设置

1. 设置某一列为行索引

上面的DataFrame数据中,行索引是0~4725的整数,假如要设置日期为行索引,可以使用set_index()方法设置。

代码语言:javascript
复制
data = pd.read_csv("600519.csv", encoding='gbk')
data3 = data.set_index('日期')
print(data3.head())

将日期设置为行索引后,“日期”这一列数据变成了索引,数据中就不再有日期了。可见,set_index()移动了列的位置,从数据移动到了行索引(但没有删除数据)。如果要将某列数据作为行索引,同时数据中也有该列数据,可以在set_index()中指定drop参数为False(set_index()中drop参数默认为True)。

2. 重设索引

修改DataFrame的行索引后,如果要将行索引还原成初始状态,可以使用reset_index()方法还原。

代码语言:javascript
复制
data4 = data3.reset_index()
print(data4.head())

reset_index()和set_index()是互逆的,不管set_index()将索引修改成了什么,都可以用reset_index()进行还原。如果set_index()中指定了drop参数为False,reset_index()中要将drop参数设置为True(reset_index()中drop参数默认为False,与set_index()相反)。

3. 设置多重索引MultiIndex

使用set_index()设置行索引时可以同时设置多个列为行索引。当一列中的数据不唯一时,可以使用两列或多列来组合成多重行索引,当需要将数据处理成多维数据时,也可以用多重索引。

代码语言:javascript
复制
data = pd.read_csv("600519.csv", encoding='gbk').head()
data5 = data.set_index(['日期', '股票代码'])
print(data5)
print(data5.index)

可以看到,当同时设置“日期”和“股票代码”为行索引后,打印行索引的结果是MultiIndex(多重索引),而前面打印原始数据的行索引为Index。

以上就是Pandas中DataFrame数据结构的基本介绍。DataFrame是Pandas中最常用的数据结构,大部分方法都是对DataFrame作处理,后面会陆续介绍更多相关的属性和方法。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-02-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python 碎片 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档