Pandas
Pandas 是基于 Numpy 的数据处理工具包,主要用来处理结构化数据,提供大量能使我们快速便捷地处理数据的函数和方法。
环境搭建
- 安装pandas
shell
pip install pandas # anaconda自带
- 测试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,使用相同列作为关联条件