Pandas库亮点及实践

Pandas库的简介     Pandas 是 Python 的核心数据分析支持库,提供了快速、灵活、明确的数据结构,旨在简单、直观地处理关系型、标记型数据。Pandas 基于 NumPy 开发,可以与其它第三方科学计...

Pandas库的简介

Pandas 是 Python 的核心数据分析支持库,提供了快速、灵活、明确的数据结构,旨在简单、直观地处理关系型、标记型数据。Pandas 基于 NumPy 开发,可以与其它第三方科学计算支持库完美集成。

Pandas 的主要数据结构是 Series(一维数据)与DataFrame(二维数据)。

Pandas库的亮点

1.处理浮点与非浮点数据里的缺失数据,表示为 NaN;

2.大小可变:插入或删除 DataFrame 等多维对象的列;

3.自动、显式数据对齐:显式地将对象与一组标签对齐,也可以忽略标签,在 Series、DataFrame 计算时自动与数据对齐;

4.强大、灵活的分组(group by)功能:拆分-应用-组合数据集,聚合、转换数据;

5.把 Python 和 NumPy 数据结构里不规则、不同索引的数据轻松地转换为DataFrame 对象;

6.基于智能标签,对大型数据集进行切片、花式索引、子集分解等操作;

7.直观地合并(merge)、连接(join)数据集;

8.灵活地重塑(reshape)、透视(pivot)数据集;

9.轴支持结构化标签:一个刻度支持多个标签;

10.成熟的 IO 工具:读取文本文件(CSV 等支持分隔符的文件)、Excel文件、数据库等来源的数据,利用超快的 HDF5 格式保存 / 加载数据;

11.时间序列:支持日期范围生成、频率转换、移动窗口统计、移动窗口线性回归、日期位移等时间序列功能。

Pandas实践入门

1

2

import pandas as pd

import numpy as np

1. pd.Series / pd.DataFrame

用值列表生成pd.Series时,可自动生成整数索引:

1

2

3

4

5

6

7

8

9

10

11

12

import numpy as np

import pandas as pd

s = pd.Series([1, 3, 5, np.nan, 6, 8])

s


0    1.0

1    3.0

2    5.0

3    NaN

4    6.0

5    8.0

dtype: float64

用 Series 字典对象生成 DataFrame:

1

2

3

4

5


df = pd.DataFrame({'A': 1.,

                   'B': pd.Series(1, index=list(range(4)), dtype='float32'),

                   'C': np.array([3] * 4, dtype='int32'),

                   'D': pd.Categorical(["test", "train", "test", "train"]),

                   'E': 'foo'})

attachments-2020-07-klJb9j1M5f100865dbd3b.png

查看DataFrame每一列的数据类型

1

2

3

4

5

6

7

8

df.dtypes


A     float64

B     float32

C       int32

D    category

E      object

dtype: object

2. pd.head(int) / pd.tail(int) / pd.index / pd.columns

查看Series、DataFrame数据结构的头部 int 个数据、尾部 int 个数据;

pd.index、pd.columns用于显示索引与列名


3. pd.Categorical()

该函数实际上是计算一个列表型数据中的类别数,即不重复项,它返回的是一个CategoricalDtype 类型的对象,相当于在原来数据上附加上类别信息。

1

2

3

4

5

6

7

8

df1 = pd.Series([0,1,2,1,4])

s = pd.Categorical(df1)

print(s)

s.dtype


[0, 1, 2, 1, 4]

Categories (4, int64): [0, 1, 2, 4]

CategoricalDtype(categories=[0, 1, 2, 4], ordered=False)

该函数还具有两个属性 codes 和 categories ,那么在实际应用中可以结合 codes 属性来一起使用,即pd.Categorical( list ).codes ,这样就可以直接得到原始数据的对应的序号列表,通过这样的处理可以将类别信息转化成数值信息 ,以至于可以应用到模型中。

1

2

3

4

5

s.codes

array([0, 1, 2, 1, 3], dtype=int8)


s.categories

Int64Index([0, 1, 2, 4], dtype='int64')

4. pd.read_csv(filepath_or_buffer,sep=’ , ’ )

1

2

3

4

#将csv文件读入并转化为DataFrame格式,

#该函数有很多默认参数,之后用到再补充

filepath_or_buffer —  文件所在处的路径

sep —  指定分割符,默认是’,’

5. pd.loc() / 5. pd.iloc()

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

# loc通过行和列的名字获取对应值

# iloc通过下标获取对应值

t1 = pd.DataFrame(np.arange(12).reshape(3, 4), index=list([1,2,3]), columns=list('abcd'))

print(t1)

 

   a  b   c   d

1  0  1   2   3

2  4  5   6   7

3  8  9  10  11


# loc和iloc, [,]逗号左右代表行和列,可是是某个值,也可以是切片


# loc

d1 = t1.loc[1, 'd']

d = t1.loc[ : , 'd']  # 可以切片

print(d1)

3


print(d)

1     3

2     7

3    11

Name: d, dtype: int32


# iloc

ia = t1.iloc[ 1: , 1:3]

ib = t1.iloc[[0,2], :]

print(ia)

   b   c

2  5   6

3  9  10


print(ib)

   a  b   c   d

1  0  1   2   3

3  8  9  10  11

6. pd.concat(objs,axis=0, join=‘outer’, join_axes=None)

1

2

3

4

5

6

# 将数据根据不同的轴作简单的融合连接

objs — 需要连接的对象,eg:[df1, df2]

axis —  axis = 0, 表示在水平方向(row)进行连接;axis = 1, 表示在垂直方向(column)进行连接

join — outer, 表示index全部需要; inner, 表示只取index重合的部分

join_axes — 传入需要保留的index

#其他有默认值的参数不常用,之后用到再补充。

7. pd.get_dummies(data, prefix=None, prefix_sep=’_’, dummy_na=False, columns=None, sparse=False, drop_first=False)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

# 将类别变量(即离散特征)转换成新增的虚拟变量/指示变量。


#离散特征的编码分为两种情况:

1、离散特征的取值之间没有大小的意义,比如color:[red,blue], 那么就使用one-hot编码

2、离散特征的取值有大小的意义,比如size:[X,XL,XXL], 那么就使用数值的映射{X:1,XL:2,XXL:3}


data — 输入的数据 (array-like, Series, or DataFrame)

prefix — get_dummies — 转换后,列名的前缀 (string, list of strings, or dict of strings)

columns — 指定需要实现类别转换的列名 (list-like, default None)

dummy_na — bool, 增加一列表示空缺值,如果False就忽略空缺值

drop_first — bool, 获得k中的k-1个类别值,去除第一个


df =pd.DataFrame({'A': 1.,

                   'B': pd.Series(1, index=list(range(4)), dtype='float32'),

                   'C': np.array([3] * 4, dtype='int32'),

                   'D': pd.Categorical(["test", "train", "test", "train"]),

                   'E': 'foo'})

df = pd.get_dummies(df, prefix = 'pre', prefix_sep='~', columns=['D','E'])

df


ABCpre~testpre~trainpre~foo

01.01.03101

11.01.03011

21.01.03101

31.01.03011

8. pd.DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)

1

2

3

4

5

6

# 将数据根据不同的方法和轴填充缺失数据(NaN)

value — 被填充的数据,scalar、dict、Series、DataFrame

method — backfill、bfill、pad、ffill

axis — 0-index,1-columns修改填充方向

inplace— default False,if True means 修改原文件

limit — 限制填充个数

9. pd.DataFrame.values

1

2

3

4

5

6

# 返回将DataFrame数据去掉index、colunms之后的array

df.values

array([[1., 1., 3., 1., 0., 1.],

       [1., 1., 3., 0., 1., 1.],

       [1., 1., 3., 1., 0., 1.],

       [1., 1., 3., 0., 1., 1.]])

  • 发表于 2020-07-16 16:01
  • 阅读 ( 357 )

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
NX小编
NX小编

1158 篇文章

作家榜 »

  1. NX小编 1158 文章
  2. 58沈剑 309 文章
  3. 奈学教育 137 文章
  4. 李希沅 | 奈学教育 36 文章
  5. 江帅帅 | 奈学教育 29 文章
  6. 林淮川 | 奈学教育 12 文章
  7. 科技热点 10 文章
  8. 邱鹏超 2 文章