专栏首页Python碎片公众号的专栏Pandas知识点-DataFrame数据结构介绍

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

一、Pandas简介和安装

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

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

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

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文件中的数据

# 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数据。

<class 'pandas.core.frame.DataFrame'>

2. DataFrame数据结构的构成

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

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

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

四、DataFrame的基本属性

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

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

2. DataFrame中的数据values

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

[['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

data = pd.read_csv("600519.csv", encoding='gbk')
print("形状:", data.shape)
data2 = data.T
print("转置后形状:", data2.shape)
形状:(4726, 15)
转置后形状:(15, 4726)

4. DataFrame中的数据类型

data = pd.read_csv("600519.csv", encoding='gbk')
print(data.dtypes)
日期       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()。

data = pd.read_csv("600519.csv", encoding='gbk')
print(data.head())
   日期     股票代码    名称  ...          成交金额           总市值          流通市值
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()方法设置。

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()方法还原。

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

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作处理,后面会陆续介绍更多相关的属性和方法。

本文分享自微信公众号 - Python 碎片(python-suipian),作者:binn wong

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-02-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Pandas知识点-Series数据结构介绍

    本文用到的数据来源于网易财经,具体下载方式可以参考上一篇文章:Pandas知识点-DataFrame数据结构介绍。

    Python碎片公众号
  • pandas知识点(数据结构)

    py3study
  • Pandas-DataFrame基础知识点总结

    1、DataFrame的创建 DataFrame是一种表格型数据结构,它含有一组有序的列,每列可以是不同的值。DataFrame既有行索引,也有列索引,它可以看...

    石晓文
  • Pandas数据结构之DataFrame

    DataFrame 是由多种类型的列构成的二维标签数据结构,类似于 Excel 、SQL 表,或 Series 对象构成的字典。DataFrame 是最常用的 ...

    用户1564362
  • Pandas知识点-统计运算函数

    统计运算非常常用。本文介绍Pandas中的统计运算函数,这些统计运算函数基本都可以见名知义,使用起来非常简单。

    Python碎片公众号
  • 玩转Pandas,让数据处理更easy系列5

    玩转Pandas系列已经连续推送4篇,尽量贴近Pandas的本质原理,结合工作实践,按照使用Pandas的逻辑步骤,系统地并结合实例推送Pandas的主要常用功...

    double
  • Python科学计算:Pandas

    在数据分析工作中,Pandas的使用频率是很高的,一方面是因为Pandas提供的基础数据结构DataFrame与json的契合度很高,转换起来就很方便。另一方面...

    慕白
  • pandas数据拼接的实现示例

    pandas数据拼接有可能会用到,比如出现重复数据,需要合并两份数据的交集,并集就是个不错的选择,知识追寻者本着技多不压身的态度蛮学习了一下下;

    砸漏
  • Python基础 | 为什么需要Pandas的DataFrame类型

    Pandas是我们平时进行数据分析时,经常会使用到的一个库,提供了非常丰富的数据类型和方法,以简化对数据的处理和分析。前面几篇文章已经介绍了Python自带的l...

    算法与编程之美

扫码关注云+社区

领取腾讯云代金券