首页 Pandas入门操作
文章
取消

Pandas入门操作

Pandas导入

1
2
import pandas as pd
import numpy as np

创建DataFram

1
2
3
4
5
6
7
8
# 手动穿件数据集
df = pd.DataFrame([
    [1001,'Mike',20],
    [1002,'Bob',21],
    [1003,'Alice',22],
])
# 从磁盘导入数据集
df = pd.read_excel('c:/Users/58212/Desktop/house_info_001.xlsx')

添加列名

1
df.columns=['编号','姓名','年龄']

读取前&后几行

1
2
df.head() # 默认读取前5行
df.tail() # 默认读取后5行

查看DataFrame描述信息

1
df.info

DataFrame 简单的统计量

1
df.describe().T

切片

1
2
3
4
5
6
# 获取单列
df['首付']
# 获取多列
df[['首付','建筑面积']]
# 获取指定几行指定几列
df.loc[1:7,['单价','建筑面积']]

筛选

1
2
3
4
5
df[df['首付']>250]
# 交集
df[(df['首付']>=150) & (df['朝向'] == '南北')].head()
# 并集
df[(df['首付']>=150) | (df['朝向'] == '南北')].head()

添加&删除&修改一列

1
2
3
4
5
6
7
8
9
# 新增列
df['测试']=True
df.head()
# 删除列
del df['测试']
# 新增并设置为空
df['测试列'] = np.nan
# 修改某个元素
df.loc[2,'住宅类别']='普通住宅'

检查缺失值

1
2
3
4
df['住宅类别'].isnull() # 输出‘住宅类别中’所有的值是否为空
df['住宅类别'].isnull().any() # 检查‘住宅类别中’是否有一列为空
df.isnull().any() # 检查所有列中是否含有控制
df.isnull().sum() # 对所有列中的空值进行计数

移除缺失值

1
2
3
4
5
6
7
8
9
# 函数作用:删除含有空值的行或列

# axis:维度,axis=0表示index行,axis=1表示columns列,默认为0
# how:"all"表示这一行或列中的元素全部缺失(为nan)才删除这一行或列,"any"表示这一行或列中只要有元素缺失,就删除这一行或列
# thresh:一行或一列中至少出现了thresh个才删除。
# subset:在某些列的子集中选择出现了缺失值的列删除,不在子集中的含有缺失值得列或行不会删除(有axis决定是行还是列)
# inplace:刷选过缺失值得新数据是存为副本还是直接在原数据上进行修改

df = df.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)

填补缺失行

1
2
3
4
5
6
7
8
# 函数作用:填充缺失值
# 
# value:需要用什么值去填充缺失值
# axis:确定填充维度,从行开始或是从列开始
# method:ffill:用缺失值前面的一个值代替缺失值,如果axis =1,那么就是横向的前面的值替换后面的缺失值,如果axis=0,那么则是上面的值替换下面的缺失值。backfill/bfill,缺失值后面的一个值代替前面的缺失值。注意这个参数不能与value同时出现
# limit:确定填充的个数,如果limit=2,则只填充两个缺失值。

df=df.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)

数据转换

1
2
3
4
5
6
7
8
9
10
11
# 修改数值
df['单价']=df['单价']*1000
# 移除单位
df['建筑面积']=df['建筑面积'].map(lambda x:x.split('')[0])
df['建筑年代']=df['建筑年代'].map(lambda x:x.split('')[0])
# 转换类型
df[['单价','建筑面积','首付']]=df[['单价','建筑面积','首付']].astype('float')
# 正则表达式
df[['','','']]=df['户型'].str.extract('(\d)室(\d)厅(\d)卫') #将户型转成了3列
# 统计某列所有的值
df['住宅类别'].value_counts()

分类数据硬编码&One-Hot编码

1
2
3
4
5
6
7
8
9
10
# 分类数据硬编码,将某列的值转成对应数值,离散特征的取值有大小的意义
house_mapping={
    '普通住宅':0,
    '商住楼':1,
    '公寓':2
}

df['住宅类别']=df['住宅类别'].map(house_mapping)
# One-Hot编码,离散特征的取值之间没有大小的意义
df=df.join(pd.get_dummies(df['楼层']))        

探索性数据分析

叙述性统计量

1
df.describe().T

便捷绘图

1
2
3
4
5
6
7
8
9
10
11
# 直方图,单价直方图
df['单价']=hist(bins=20) # 20个容器
plt.show()
# 箱线图,单价箱线图
p=df.boxplot(column='单价')
# 散点图
import matplotlib.pyplot as plt
plt.scatter(df['单价'],df['首付'])
plt.show()
# 皮尔逊相关系数,其其他参数的线性关系值
df.corr()
本文由作者按照 CC BY 4.0 进行授权

Matplotlib快速入门

K- 近邻算法