使用Pandas进行数据处理

该博客主要介绍了数据预处理的全过程,包括读取CSV数据、合并数据框、缺失值和重复值处理、数据类型转换及异常值剔除。通过分组分析成交单价并进行离散化,揭示了数据的主要分布特征。同时,对楼层信息进行了提取和转换,为后续分析做好准备。
摘要由CSDN通过智能技术生成

1. 准备工作


首先导入所需要的pandas,numpy,matplotlib,设置jupyter显示绘图

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

2. 读取数据


创建空列表,遍历循环,将csv文件依次读取并存入列表中,得到一个包含数据框的列表datalist

datalist = []
for i in range(1,3):
    try:
        data = pd.read_csv('lianjia{}.csv'.format(i),encoding = 'gbk')
    except:
        data = pd.read_csv('lianjia{}.csv'.format(i),encoding = 'utf-8')
    datalist.append(data)

将列表中所有数据框合并为一个数据框

data = pd.concat(datalist)

查看描述统计和字段格式信息

data.describe()
data.info()

在这里插入图片描述
在这里插入图片描述

查看数据框前5行

data.head()

在这里插入图片描述

3. 提取研究字段


将需要研究的字段提取出来

data = data[['cjdanjia','cjxiaoqu','cjlouceng','bankuai']]

查看提取后的前5行

data.head()

在这里插入图片描述

4. 缺失值判断、处理


通过逻辑值求和,检查数据框中是否有缺失值

(data.isnull()).sum()#查看是否有缺失值

在这里插入图片描述

查看有缺失值的具体行

data[data.cjdanjia.isnull()]#查看成交单价缺失的行

在这里插入图片描述

删除含有缺失值的行,加入how = ‘all’,删除一行全为空的行

data.dropna(inplace = True)#删除字段全为空的行how = 'all',

5. 重复值判断、处理


查看是否含有重复行,若逻辑值的和为n,则有n条重复行

(data.duplicated()).sum()#查看是否有重复值

查看是否有除bankuai外的三个字段重复的行

(data.duplicated(subset = ['cjdanjia','cjxiaoqu','cjlouceng'])).sum()

查看重复值

data[data.duplicated()]

在这里插入图片描述
将数据集按照板块排序,要先排序之后再删除重复值,这是因为如果不按照板块排序的话,删除的重复值可能板块不为空,会丢失信息

data.sort_values(by = 'bankuai',inplace = True)

删除重复值,查看排序并删重之后的数据是什么样子的

data.drop_duplicates(subset = ['cjdanjia','cjxiaoqu','cjlouceng'],inplace = True)
data.head()

在这里插入图片描述

6. 数据类型转换


查看不包含元/平的行数

(data.cjdanjia.str.contains('元/平') == False).sum()

将成交单价列的字符去掉’元/平’,转为float,以万为单位,保留两位小数点

data = data.assign(cjdanjia = np.round(data.cjdanjia.str.replace('元/平','').astype(np.float32).map(lambda x:x/10000),2))

7. 剔除异常值


查看成交单价字段中的最小值

data.cjdanjia.min()

剔除成交单价小于0.5万的数据

data = data[data.cjdanjia > 0.5]

8. 数据离散化分析


对数据进行分组,进行离散化分析,绘制出区间分布条形图,将横坐标旋转20度显示。从条形图可以看出,3-5万的成交单价数量最多,10万以上的成交单价非常少。

bins = [0,1,3,5,7,10,15]
pd.cut(data.cjdanjia,bins).value_counts().plot.bar(rot = 20)

在这里插入图片描述

9. 字符串处理


检验成交楼层字段,是否都是由三个部分组成,由/分隔

(data.cjlouceng.str.split('/').map(len) != 3).sum()

将朝向、楼层提取出来存为单独一列字段

data = data.assign(chaoxiang = data.cjlouceng.map(lambda x:x.split('/')[0]))
data = data.assign(louceng = data.cjlouceng.map(lambda x:x.split('/')[1]))

返回列唯一值

data.louceng.unique()

在这里插入图片描述

将楼层列的字符串转为数值型

data = data.join(pd.get_dummies(data.louceng))
data.head()

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值