1. 什么是 pandas

pandas 是基于 numpy 构建的,它是一套用来进行数据分析的数据结构和操作工具,
它具有处理数据缺失值,便捷的数据分组过滤,进行数据汇总和统计分析的功能

2. pandas 能做什么

  • 处理缺失的数据
  • 数据过滤分组,排序
  • 数学计算
  • 数据排序,统计分析
  • 从多个数据源(文件,数据库)导入,导出数据

3. 主要数据结构 Series 和 DataFrame

3.1 Series 数据结构

类似一维数组的数据结构,它由一组数据及其相关的索引组成

可以使用列表创建一个简单的 Series,默认创建整数索引

import pandas as pd
obj = pd.Series([2, 8, -5, 9])

print(obj)

# 打印数组形式的值
print(obj.values)

# 打印 Series 索引
print(obj.index)

输出

0    2
1    8
2   -5
3    9
dtype: int64

# 数组形式
[ 2  8 -5  9]

# 索引
RangeIndex(start=0, stop=4, step=1)

Series 可以使用有意义的标记索引,如下使用 a, b, c, d 作为索引

obj_2 = pd.Series([4, 8, -5, 2], index=['a', 'b', 'c', 'd'])

# 使用条件过滤
print(obj_2[obj_2>0])

# 使用索引修改数据
obj_2['c'] = 10

print(obj_2[['a', 'c', 'd']])

# 用 in 判断索引存在
print( a in obj_2)

输出

# 条件过滤( >0 )结果输出
a    4
b    8
d    2

# 修改索引数据后结果输出
a    4
c   10
d    2
dtype: int64

# 判断索引存在的结果输出
True

可以用字典创建 Series,只传入一个字典,字典键就是索引

my_dict = {1: 4, 'a': 2, 'c': 'hello'}
obj_3 = pd.Series(my_dict)
print(obj_3)
print(obj_3[1])
print(obj_3['a'])

使用索引和字典创建 Series,使用 NaN 表示缺失值

obj_3 = pd.Series(my_dict, index=[1, 'b'])
print(obj_3)
print(obj_3.isnull())
print(obj_3.notnull())

输出

# 用索引和字典创建 Series
1    4.0
b    NaN
dtype: float64

# 判断 isnull
1    False
b     True
dtype: bool

# 判断 notnull
1     True
b    False
dtype: bool

3.2 DataFrame 数据结构

DataFrame 是一个表格数据结构,它包含一组有序的列,每列可以保存不同值类型(字符串,数值,bool值),
DataFrame 既有行索引,也有列索引,它是一个二维数据结构

3.2.1 创建 DataFrame

可以使用字典构建 DataFrame,字典的键是列索引,默认自动加上行索引

data = {'one': [1, 2, 3],
        'two': [4, 5, 6],
        'three': [7, 8, 9]}
print(pd.DataFrame(data))

输出

   one  three  two
   0    1      7    4
   1    2      8    5
   2    3      9    6

用嵌套字典构建 DataFrame,外部字典的 key 作为列,内部字典的 key 作为行索引

data = {'one': {'row1': 1, 'row2': 2},
        'two': {'row1': 1, 'row2': 2},
        'three': {'row1': 1, 'row2': 2, 'row3': 3},
       }

print(pd.DataFrame(data, columns=['one', 'two', 'three']))

输出

      one  two  three
row1  1.0  1.0      1
row2  2.0  2.0      2
row3  NaN  NaN      3

3.2.2 从 DataFrame 获取 Series 和数组

通过字典下标的方式,从 DataFrame 提取列为 Series

# DataFrame 获取 Series
df = pd.DataFrame(data, columns=['one', 'two', 'three'])
print(df['one'])
print(type(df['one']))

# DataFrame 获取数组
print(type(df.values))
print(df.values)

输出

# DataFrame => Seriew
row1    1.0
row2    2.0
row3    NaN
Name: one, dtype: float64
<class 'pandas.core.series.Series'>

# DataFrame => array
<class 'numpy.ndarray'>
[[  1.   1.   1.]
 [  2.   2.   2.]
 [ nan  nan   3.]]
right