1、解读
1.1 目录结构:
1.2 数据读取
首先是对于数据的读取,把lianjia1.csv和lianjia2.csv放在main.py的相同目录下,导入pands
import pandas as pd
为了方便数据的预览,设置pandas输出时显示完整的数据
# 显示所有列
pd.set_option('display.max_columns', None)
# 显示所有行
pd.set_option('display.max_rows', None)
开始对数据进行读取
def rcsv():
datalist = []
print(c.OKBLUE + "# 读取数据" + c.ENDC)
for i in range(1, 3):
data = pd.read_csv("lianjia{}.csv".format(i), encoding='GBK')
datalist.append(data) # 注意这里列表长度是2
return datalist
lianjia = rcsv()
注:使用rcsv()
函数读取的数据传入lianjia,这时的lianjia的数据类型为list,可以使用print(type(lianjia))
来查看,输出<class 'list'>
问题:如何将list转换为DataFrame类型?
答:采用pandas的concat()函数进行合并
lianjia = pd.concat(lianjia)
至此,数据的初步读取完成,执行print(lianjia.head(5))
预览读取到的前5条数据
1.3 数据提取
从上图可以发现,有很多数据我们暂时也许是用不到的,假设需要用到的数据是['成交单价', '成交小区', '成交楼层', '版块']
这四列,使用lianjia = lianjia[['成交单价', '成交小区', '成交楼层', '版块']]
即可提取出所需的数据。执行print(lianjia.head(5))
预览读取到的前5条数据
1.4 缺失值预处理
数据提取之后,在进行分析之前,需要把缺失的数据删除。
使用print(lianjia.isnull().sum())
来输出缺失值的数量
查看缺失值print(lianjia[lianjia.版块.isnull()])
可以发现,版块的缺失值比较多,但是版块并不重要,在这里我们需要把成交单价缺失的行删除掉,但是如果直接用lianjia.dropna()
进行删除,那么仅仅是版块缺失的行也会被删除,因此采用
lianjia.dropna(how='all', inplace=True)
传入参数:
# 传入参数
how='all' # 指的是删除数据全部缺失的行
inplace=True # 是指把操作应用到lianjia变量之上
这样的话,删除了所有数据都缺失的行,保留下来的数据都是有单价的数据。
再次统计缺失值
print(lianjia.isnull().sum())
至此,缺失值的处理完成。
1.5 重复值预处理
使用pandas的duplicated()函数统计重复行的数量。
print(lianjia.duplicated().sum())
在这个地方要注意的一个点,之前我们发现数据集中的某些行的版块是缺失的,但是如果有这么两条数据,是重复的,但是其中一条的版块数据丢失了,用上面的方法不能把这种重复行筛选出来,因此采用下面的,只去看’成交单价’, ‘成交小区’, '成交楼层’三个值重复的行。
print(lianjia.duplicated(subset=['成交单价', '成交小区', '成交楼层']