基于 Python 和 Pandas 的数据分析 --- Pandas 基础

Posted rachelross

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于 Python 和 Pandas 的数据分析 --- Pandas 基础相关的知识,希望对你有一定的参考价值。

在这个用 Python 和 Pandas 实现数据分析的教程中, 我们将明确一些 Pandas 基础知识. 加载到 Pandas Dataframe 的数据形式可以很多, 但是通常需要能形成行和列的数据集. 所以可以是如下的 dictionary 的形式:

web_stats = {\'Day\':[1,2,3,4,5,6],
             \'Visitors\':[43,34,65,56,29,76],
             \'Bounce Rate\':[65,67,78,65,45,52]}

我们可以通过如下方式把这个 dictionary 转换成 dataframe:

import pandas as pd

web_stats = {\'Day\':[1,2,3,4,5,6],
             \'Visitors\':[43,34,65,56,29,76],
             \'Bounce Rate\':[65,67,78,65,45,52]}

df = pd.DataFrame(web_stats)

正如上一节所讲的, 现在我们把 df 打印出来看一下它的数据结构:

print(df.head())

输出:

   Bounce Rate  Day  Visitors
0           65    1        43
1           67    2        34
2           78    3        65
3           65    4        56
4           45    5        29

此时, 你可能想要获取最后的几行数据, 可以这样做:

print(df.tail())

输出:

   Bounce Rate  Day  Visitors
1           67    2        34
2           78    3        65
3           65    4        56
4           45    5        29
5           52    6        76

你也可以指定要前几行或者后几行数据:

print(df.tail(2))
   Bounce Rate  Day  Visitors
4           45    5        29
5           52    6        76

正如你所看到的, 输出数据的左边总有一列 0,1,2,3,4,5 的数字. 我们把这些数字叫做"索引". 一个 dataframe 的索引体现了数据的关联关系和排序规则. 或者说, 你希望怎样呈现数据结构. 通常情况下, 这个索引应该是联系所有数据的变量. 在这个例子中, 我们还没有这样定义索引,当你没有明确索引的时候, Pandas 就会自动为你创建一个数字索引. 那么现在我们来看一下这个例子中的数据集, 你是否能看出哪个列的数据是跟所有其他列的数据都能产生关联关系的?

没错, 就是 "Day" 这个列! 通常情况下, 任何关于时间的数据, 都会被用作索引. 但是这并不是绝对的, 主要还是取决于你想怎样呈现数据, 甚至还可以定义多重索引(这个我们后面会介绍). 定义索引有很多方式. 这里我们将介绍两种, 第一种, 在现有的 dataframe 上, 可以这样设置索引:

df.set_index(\'Day\', inplace=True)

输出:

        Bounce Rate  Visitors
Day                       
1             65        43
2             67        34
3             78        65
4             65        56
5             45        29

这里的变化是, 最左边的序列号消失了, "Day" 比其他的表头都低了一行, 这意味着 "Day" 成了新的索引. 有一点需要注意的是, 我们使用了 "inplace=True", 这样做是为了切实地改变原来的 dataframe. 如果不用 "inplace=True", 我们需要这样做, 也可以起到更新的作用:

df = df.set_index(\'Day\')

这个索引列会被用作 x 轴. 如果其他列也都是数字数据, 那么我们可以轻松地通过 plot 打印出图表, 就像我们上节课所讲, 首先在脚本的顶部做如下引入:

import matplotlib.pyplot as plt
from matplotlib import style

style.use(\'fivethirtyeight\')

然后, 在下面就可以使用 plot 了. 这里还有一个小知识点要介绍的就是关于打印具体某个列, 有两种方式, 下面是第一种方式:

print(df[\'Visitors\'])
Day
1    43
2    34
3    65
4    56
5    29
6    76
Name: Visitors, dtype: int64

第二种方式是可以把每个列都看作是 dataframe 对象的属性, 可以打点调用. 但是这里有一点要注意的是, 这个列的名称不可以有空格:

print(df.Visitors)
Day
1    43
2    34
3    65
4    56
5    29
6    76
Name: Visitors, dtype: int64

现在就来输出一个单独列的图表:

df[\'Visitors\'].plot()
plt.show()

当然, 我们也可以把这个 dataframe 都以图表的形式输出:

df.plot()
plt.show()

我们还可以指定打印具体的某两列(在这个列子中, 我们只有两列, 但是其实不管一共有多少列, 我们都可以这样做):

print(df[[\'Visitors\',\'Bounce Rate\']])

当然, 我们也可以将其以图表的形式输出.

另外, 我们还可以把某个列的数据转换成数组:

print(df.Visitors.tolist())

输出:

[45, 34, 56, 67, 98, 34]

一维数组可以直接用 tolist() 函数. 那么, 如果想把两列数转换成二维数组要怎么做呢? 这时, 我们就需要再引入一个包:

import numpy as np
pd2 = np.array(df[[\'Visitors\', \'Bounce_Rate\']])
print(pd2)

输出:

[[45 65]
 [34 89]
 [56 43]
 [67 56]
 [98 73]
 [34 45]]

然后再将这个二维数组转换成 dataframe:

pd2 = pd.DataFrame(np.array(df[[\'Visitors\', \'Bounce_Rate\']])) 
print(pd2)

输出:

    0   1
0  45  65
1  34  89
2  56  43
3  67  56
4  98  73
5  34  45

以上就是一些简单的操作 dataframe 的方法.

后面会持续更新, 有任何问题或者错误, 欢迎留言, 希望和大家交流学习.



以上是关于基于 Python 和 Pandas 的数据分析 --- Pandas 基础的主要内容,如果未能解决你的问题,请参考以下文章

Python中使用pandas数据框和嵌套for循环的基于项目的协作过滤器的瓶颈

「Python 机器学习」Pandas 数据分析

python使用pandas基于时间条件查询多个oracle数据表

Python Pandas Dataframe - 基于条件的分组和平均值

Python pandas用法

Python数据分析 | 基于Pandas的数据可视化