Pandas学习笔记(一)

认识 DataFrame

DataFrame是一种Pandas的数据格式,它类似于Excel表格,可以用来处理各种不同的数据。 他的强大之处还不限于此,他可以处理二维甚至是多维数据,支持科学计算,对各种数据格式支持友好…

例如,你可以这样构建一个df(DataFrame):

>>> d = {'col1': [1, 2], 'col2': [3, 4]}
>>> df = pd.DataFrame(data=d)
>>> df
   col1  col2
0     1     3
1     2     4

同样你也可以这样构建一个df:

>>> df2 = pd.DataFrame(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]),
...                    columns=['a', 'b', 'c'])
>>> df2
   a  b  c
0  1  2  3
1  4  5  6
2  7  8  9

还可以这样:

>>> data = np.array([(1, 2, 3), (4, 5, 6), (7, 8, 9)],
...                 dtype=[("a", "i4"), ("b", "i4"), ("c", "i4")])
>>> df3 = pd.DataFrame(data, columns=['c', 'a'])
...
>>> df3
   c  a
0  3  1
1  6  4
2  9  7

这里只是简单介绍一下DataFrame的创建方式,创建它的方法有很多,这里就不过多赘述。

数据分析

Pandas 在用于数据分析方面也是一个很强很好用的工具,它甚至可以联合matplotlib进行绘图。

例如,我们可以使用它来检测数据中是否含有空值:

  import pandas as pd
  import matplotlib.pyplot as plt
  
  df = pd.read_csv(r'test.csv')
  print(df.isna())

        id   name  market_rate    sex
0  False  False        False  False
1  False  False         True  False
2  False  False        False  False
3  False  False        False  False
4  False  False        False  False
5  False  False         True  False
6  False  False         True  False
7  False  False        False  False

删除空值行

  df = df.dropna()

     id     name  market_rate sex
0   1   xiaomi          1.0   F
1   2   huawei          NaN   M
2   3    apple          3.0   F
3   4    meizu          4.0   M
4   5     vivo          5.0   M
5   6     oppo          NaN   F
6   7  oneplus          NaN   M
7   8    nokia          8.0   M

   id    name  market_rate sex
0   1  xiaomi          1.0   F
2   3   apple          3.0   F
3   4   meizu          4.0   M
4   5    vivo          5.0   M
7   8   nokia          8.0   M

填充空值

  df.fillna(df['market_rate'].mean(),inplace=True)

     id     name  market_rate sex
0   1   xiaomi          1.0   F
1   2   huawei          4.2   M
2   3    apple          3.0   F
3   4    meizu          4.0   M
4   5     vivo          5.0   M
5   6     oppo          4.2   F
6   7  oneplus          4.2   M
7   8    nokia          8.0   M

分类聚合

  df = df.groupby('sex')['market_rate'].agg('mean')

  sex
F    2.733333
M    5.080000

数据可视化

  df.plot(kind="pie", y='market_rate', subplots=True, figsize=(11,6))
  plt.show()

matplotlib 绘图