使用Pandas进行数据处理

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()

使用Pandas进行数据处理_第1张图片
使用Pandas进行数据处理_第2张图片

查看数据框前5行

data.head()

使用Pandas进行数据处理_第3张图片

3. 提取研究字段


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

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

查看提取后的前5行

data.head()

使用Pandas进行数据处理_第4张图片

4. 缺失值判断、处理


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

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

使用Pandas进行数据处理_第5张图片

查看有缺失值的具体行

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()]

使用Pandas进行数据处理_第6张图片
将数据集按照板块排序,要先排序之后再删除重复值,这是因为如果不按照板块排序的话,删除的重复值可能板块不为空,会丢失信息

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

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

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

使用Pandas进行数据处理_第7张图片

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)

使用Pandas进行数据处理_第8张图片

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()

使用Pandas进行数据处理_第9张图片

你可能感兴趣的:(数据处理个人学习笔记,python)