概述

Pandas库在 NumPy的基础上,补充了很多对数据处理特别有用的功能,如标签索引、分层索引、数据对齐、合并数据集合、处理丢失数据等。因此,Pandas库已经成为Python 中执行高级数据处理的事实标准库,尤其适用于统计应用分析。

一些其他的相关库

  • statemodels,pastyscikit-learn:更复杂的统计分析和建模
  • Seabron:强大的统计绘图功能

Pandas中的两大主要数据结构:

SeriesDataFrame

导入模块

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
  • 使用一种更美观的绘图样式
import matplotlib as mpl
mpl.style.use('ggplot')
  • 导入seaborn模块
import seaborn as sns

Series对象

基础操作

  • index,value属性
  • 与numpy的数组很像
s = pd.Series([98790, 234,57562, 6736])
print(s)
print(s.index)
print(s.values)
  • 输出
0    98790
1      234
2    57562
3     6736
dtype: int64
RangeIndex(start=0, stop=4, step=1)
[98790   234 57562  6736]

更具有描述性的方式

  • 可以把一个新的索引列表赋值给Series对象的index属性,也可以给 Series 对象的 name 属性设置有意义的名称。
s.index = {"北京", "上海", "广州", "深圳"}
s.name = "评分"
print(s)
print(s.index)
print(s.values)
  • 输出
北京    98790
广州      234
上海    57562
深圳     6736
Name: 评分, dtype: int64
Index(['北京', '广州', '上海', '深圳'], dtype='object')
[98790   234 57562  6736]
  • 也可以在创建Series的时候就设置索引和名称
s = pd.Series([98790, 234,57562, 6736], name="评分", 
            index = ['北京', '广州', '上海', '深圳'])
  • 可以通过将索引作为下标来访问数据,也可以直接访问与索引名同名的属性
s['北京']
s.北京
  • 使用一个索引列表来访问 Series 对象,将返回一个新的包含原始数据子集(与列表的索引对应)的 Series 对象
s[["北京", "上海"]]

获得Series的统计信息的方法

s.median()
s.mean()
s.std()
s.min()
s.max()
s.quantile()
  • 以上所有信息都可以通过describe()方法统一输出
print(s.describe())
count        4.000000
mean     40830.500000
std      46367.220731
min        234.000000
25%       5110.500000
50%      32149.000000
75%      67869.000000
max      98790.000000
Name: 评分, dtype: float64

和matplotlib联动进行可视化

  • 可以通过 ax 参数把一个 matplotlib Axes 实例传给 plot 方法
  • 通过 kind 参数进行设置(可选值有 line、hist、bar、barh、box、kde、density、area 和 pie)
fig, axes = plt.subplots(1,4,figsize=(12,3))
s.plot(ax=axes[0], kind='line', title='line')
s.plot(ax=axes[1], kind='bar', title='bar')
s.plot(ax=axes[2], kind='box', title='box')
s.plot(ax=axes[3], kind='pie', title='pie')

plt.show()

alt text

DataFrame对象

DataFrame的初始化

使用嵌套列表

df = pd.DataFrame([[9999,"永州"],[8888,"成都"],[5555,"北京"],[1111,"上[>print(df)
      0   1
0  9999  永州
1  8888  成都
2  5555  北京
3  1111  上海
  • 可以通过index设置行索引,通过columns属性来设置列标签
df.columns = ['评分', '城市']
print(df)
     评分  城市
0  9999  永州
1  8888  成都
2  5555  北京
3  1111  上海

使用字典进行初始化

  • 列头是字典的键,每列的数据是字典的值

索引

类似于 NumPy 数组使用 values 属性获取数据一样,可以使用 index 和 columns 属性分别获取DataFrame 中数据的索引和所有列,其中的每一列可以使用与列名相同的属性来访。

  • df["评分"]df.评分类似

loc索引器

从 DataFrame 中提取一列数据后,将返回一个新的 Series 对象。DataFrame 实例的行可以使用loc索引器属性进行索引。在该属性上进行索引后返回的也是一个 Series 对象,对应原始数据结构中的一行数据:

  • df.loc[0]

给loc索引器属性传入一个行标签列表后,将返回一个新的 DataFrame,它是原始 DataFrame 的一个子集,里面只包含选择的行。

df.set_index():将索引设置为其他的列

df_pop2 = df_pop.set_index("City")

sort_index():将索引作为关键字对所有数据进行排序

sort_values():根据某列进行排序,关键字ascending设置降序/升序

分层/多层索引


暂时略


统计信息

  • 基本统计信息的获取:与Series类似,当调用相关的函数时,DataFrame会对每个数值类型的列进行计算
  • df.info()方法查看数据集的概要信息
  • 对于很大的数据集使用df.head(),df.tail()截取首尾的子集

df.value_counts():对于分类数据进行统计

DataFrame读写数据

CSV文件

read_csv()函数:从.csv文件读取数据并创建DataFrame实例

  • 可选参数 参数|作用 ---|--- header| 指定哪一行是列头 skiprows| 跳过开头的几行 delimiter| 每列之间的分隔符 nrows|

待添加


数据转换操作

df.apply()方法

  • 把函数传给某列的 apply 方法之后,该函数将作用于该列中的每个元素,生成一个新的 Series 对象并返回。
  • 例如,可以传递一个lambda 函数(用于去掉字符串中的“,”字符,并把结果转换为整数类型)给 apply方法,把Population 列的元素从字符串类型转换为整数类型。然后把转换后得到的列赋值给名为NumericPopulation的新列。
  • 使用同样的方法,可以对 State 列中的数据进行清洗,再使用 stip 方法去除 State 列中每个元素末尾的空格。
df_pop[“NumericPopulation”] = df_pop.Population.apply(
    lambda x: int(x.replace(',', ''))
)
df_pop["State"] = df_pop["State"].apply(lambda x: x.strip())

时间序列

Seabron图形库