Skip to content

Pandas

Pandas 是基于 Numpy 的数据处理工具包,主要用来处理结构化数据,提供大量能使我们快速便捷地处理数据的函数和方法。

环境搭建

  1. 安装pandas
shell
pip install pandas   # anaconda自带
  1. 测试pandas版本
python
import pandas as pd
print(pd.__version__)

使用

Pandas 的核心数据结构Series、DataFrame;Series是一个一维数据结构,类似于列表。DataFrame是一个二维数据结构,类似于Excel表格,可以存储任意类型数据,包括数值型、字符串型、布尔型等。

基础使用

函数说明
pd.Series()创建Series对象
pd.Series(data)
pd.Series(data, index)
p_dict = {'bj':30} pd.Series(p_dict) pd.Series(p_dict, index=['bj','sh']) sh:NaN
pd.Series(10, index=['a','b'])
pd.DataFrame()创建DataFrame对象
pd.DataFrame({'area':a, 'pop':b})
pd.DataFrame([a_dict,b_dict])
pd.DataFrame([a_dict,b_dict],index=['a','b'])
pd.DataFrame(pd.Series(p_dict),columns=['a','b'])
python
import pandas as pd
datas = pd.Series(data=[1,2,3,4], index=['a','b','c','d'])
datas.index   # RangeIndex(start=0, stop=4, step=1) 索引值
datas.values  # array([1, 2, 3, 4], dtype=int64) 字典形式

a_dict = {'bj':30}  
b_dict = {'bj':200}  
a = pd.Series(a_dict)
b = pd.Series(b_dict)
datas = pd.DataFrame({'area':a, 'pop':b})
datas.index
datas.values 
datas.columns
Series
函数说明
data['a']获取标签索引a的值
data['a':'d']获取标签索引a-d的值 左闭右闭
data[1]获取位置索引1的值 从0开始
data[1:3]获取位置索引1-3的值 从0开始,左闭右开
data.loc[1]获取标签索引1的值
data.iloc[1]获取位置索引1的值
Series方法使用
函数说明
data.mean()计算均值
data.max()计算最大值
data.min()计算最小值
data.std()计算标准差
data.sort_values()排序
data[data>data.mean()]筛选大于均值的数据
pd.concat拼接
python
import pandas as pd

datas = pd.DataFrame({'name':['loce','mlliud'], 'age':[30,29},columns=['name','age'],index=['loce','mlliud'])
ages = datas['age']

ages.sort_values(ascending=False)  # 默认升序  ascending=False 倒序
ages[ages>ages.mean()]   # 筛选大于均值的数据
DataFrame
函数说明
data['a']获取a列的值
data[['a','b']]获取a\b列的值
data.iloc[:,1]获取1列的值。 :表示所有行
data.iloc[:,[0,2]]获取1,3列的值。 :表示所有行
data.iloc[:,0:2]获取0,1列的值。 :表示所有行
data.iloc[0:2,0:2]获取0,1行,0,1列的值。
data.loc[:,'a':'d']获取标签索引a-d列的值 左闭右闭
DataFrame方法使用
函数说明
datas[ages>ages.mean()]筛选大于均值的数据
python
import pandas as pd

datas = pd.DataFrame({'name':['loce','mlliud'], 'age':[30,29},columns=['name','age'],index=['loce','mlliud'])

ages = datas['age']
datas[(ages>ages.mean()) & (ages<200)]   # 筛选大于均值的数据

场景处理

缺失值处理

数据是宝贵的,一般情况下只要数据缺失比例在30%以下,尽量不删除。

函数说明
data.info()缺失值查看
data.isnull()判断是否有缺值,获取空值
data.notnull()判断是否有缺值,获取非空值
data.dropna()删除有缺失值的行,不改变原数据
data.dropna(axis='a') axis='列名'
data.dropna(how='all') how=any有就删除(默认值),how=all全为空就删除
data.fillna()填充缺失值,不改变原数据
data.fillna(0)
data.fillna(method='ffill') 以前一个数填充
data.fillna(method='bfill') 以后一个数填充
data.fillna(method='ffill',axis=1) axis按照行列进行填充(DataFrame)
python
import pandas as pd
import numpy as np

df = pd.DataFrame([[1,2,np.nan],[4,np.nan,6],[5,6,7]])
df.info()

df = pd.Series([3,4,np.nan,1,5,None]])
df.isnull()
df[df.isnull()]   # 获取空数据
数据拼接
函数说明
pd.concat([df1,df2])拼接
pd.merge(df1,df2)合并 how=['left','right','outer','inner'],默认值inner
python
import pandas as pd
import numpy as np

def make_df(cols, ind):
    data = {c: [str(c) + str(i) for i in ind] for c in cols}
    return pd.DataFrame(data, ind)

df1 = make_df('AB', [1, 2])
df2 = make_df('AB', [3, 4])
pd.concat([df1, df2])          # 行拼接
pd.concat([df1, df2], axis=1)  # 列拼接
pd.concat([df1, df2], ingore_index=True) # 忽略索引号 从0开始,自增
pd.concat([df1, df2], keys=['x', 'y']) # 添加索引号   将def1和def2拼接,添加索引号,x和y分别代表df1和df2
pd.concat([df1, df2], join='inner')  # 交集 列名相同才拼接

pd.merge(df1, df2)  # 类似mysql的inner join,使用相同列作为关联条件

上次更新于: