实战3
读取北上广深瓜子二手车的数据
• 1.分别读取4个csv文件,然后合并多个csv文件
• 2.去重复数据,重新设置连续索引
• 3.汽车自动挡和手动挡,那么分别有多少辆
• 4.哪个城市二手车数量最多
• 5.获取深圳市最多的二手车品牌
#!/user/bin/env python
#-*-coding: utf-8-*-
#@Time : 2020/9/15 9:38
#@Author : GodSpeed
#@File : Pandas实战02_03.py
#@Software : PyCharm
import pandas as pd
import numpy as np
'''
实战3(可做)
读取北上广深瓜子二手车的数据
• 1.分别读取4个csv文件,然后合并多个csv文件
• 2.去重复数据,重新设置连续索引
• 3.汽车自动挡和手动挡,那么分别有多少辆
• 4.哪个城市二手车数量最多
• 5.获取深圳市最多的二手车品牌
'''
#判断是否存在重复值
def Judging_duplicate(df):
'''
:param df: 被判断的对象,类型为DataFrame
:return: True表示存在,False表示不存在
'''
# 判断数据是否存在nan
if df.duplicated().values.any():
print('存在重复数据')
return True
else:
print('不存在重复数据')
return False
#1.分别读取4个csv文件,然后合并多个csv文件
bj_guzi_data = pd.read_csv('./瓜子/guazi_bj.csv')
print(bj_guzi_data.shape)
sh_guzi_data = pd.read_csv('./瓜子/guazi_sh.csv')
print(sh_guzi_data.shape)
gz_guzi_data = pd.read_csv("./瓜子/guazi_gz.csv")
print(gz_guzi_data.shape)
sz_guzi_data = pd.read_csv("./瓜子/guazi_sz.csv")
print(sz_guzi_data.shape)
'''
合并数据:行堆叠
'''
guzi_data = pd.concat((bj_guzi_data,sh_guzi_data,gz_guzi_data,sz_guzi_data),axis=0)
print(guzi_data.shape)
print(guzi_data.head())
print(guzi_data.info())
'''
<class 'pandas.core.frame.DataFrame'>
Int64Index: 7027 entries, 0 to 1496
Data columns (total 19 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 title 7027 non-null object
1 brand 7027 non-null object
2 buy_time 6978 non-null object
3 km 7027 non-null float64
4 speedbox 7027 non-null object
5 displacement 7027 non-null object
6 es_price 7027 non-null float64
7 new_price 7027 non-null float64
8 city 7027 non-null object
9 year_type 7027 non-null object
10 level 7027 non-null object
11 suv 7027 non-null int64
12 horsepower 7027 non-null object
13 fuel 7027 non-null object
14 length 7027 non-null int64
15 width 7027 non-null int64
16 height 7027 non-null int64
17 owners 0 non-null float64
18 drive 7027 non-null object
dtypes: float64(4), int64(4), object(11)
memory usage: 796.0+ KB
None
Process finished with exit code 0
'''
#2.去重复数据,重新设置连续索引
if Judging_duplicate(guzi_data):
print('存在重复值')
# 删除重复数据
guzi_data.drop_duplicates(inplace=True)
else:
print('不存在重复值')
print(guzi_data)
'''
title brand buy_time ... height owners drive
0 大众 宝来 2014款 1.6L 自动时尚型 一汽-大众 2014-08 ... 1467 NaN 前置前驱
1 福特 福睿斯 2015款 1.5L 自动时尚型 长安福特 2015-12 ... 1490 NaN 前置前驱
2 大众 速腾 2012款 1.6L 自动舒适型 一汽-大众 2012-05 ... 1482 NaN 前置前驱
3 奔驰C级 2011款 C 200 CGI 时尚型 北京奔驰 2013-01 ... 1444 NaN 前置后驱
4 大众 帕萨特 2013款 2.0TSI DSG御尊版 上汽大众 2013-11 ... 1472 NaN 前置前驱
... ... ... ... ... ... ... ...
1492 别克 君威 2015款 GS 2.0T 豪情运动版 上汽通用别克 2016-03 ... 1494 NaN 前置前驱
1493 雪佛兰 迈锐宝 2018款 530T 自动舒适版 上汽通用雪佛兰 2017-10 ... 1476 NaN 前置前驱
1494 丰田 锐志 2013款 2.5S 菁锐版 一汽丰田 2013-10 ... 1450 NaN 前置后驱
1495 日产 逍客 2011款 1.6XE 风 5MT 2WD 东风日产 2012-01 ... 1606 NaN 前置前驱
1496 丰田 卡罗拉 2014款 1.6L CVT GL-i 一汽丰田 2015-10 ... 1480 NaN 前置前驱
[7016 rows x 19 columns]
'''
#问题一共7016行,但是索引才1496说明索引有重复
print('前',guzi_data.index.max())
#解决方法:重置索引
print(list(range(7016)))
guzi_data.reset_index(inplace=True)
print(guzi_data)
'''
index title brand ... height owners drive
0 0 大众 宝来 2014款 1.6L 自动时尚型 一汽-大众 ... 1467 NaN 前置前驱
1 1 福特 福睿斯 2015款 1.5L 自动时尚型 长安福特 ... 1490 NaN 前置前驱
2 2 大众 速腾 2012款 1.6L 自动舒适型 一汽-大众 ... 1482 NaN 前置前驱
3 3 奔驰C级 2011款 C 200 CGI 时尚型 北京奔驰 ... 1444 NaN 前置后驱
4 4 大众 帕萨特 2013款 2.0TSI DSG御尊版 上汽大众 ... 1472 NaN 前置前驱
... ... ... ... ... ... ... ...
7011 1492 别克 君威 2015款 GS 2.0T 豪情运动版 上汽通用别克 ... 1494 NaN 前置前驱
7012 1493 雪佛兰 迈锐宝 2018款 530T 自动舒适版 上汽通用雪佛兰 ... 1476 NaN 前置前驱
7013 1494 丰田 锐志 2013款 2.5S 菁锐版 一汽丰田 ... 1450 NaN 前置后驱
7014 1495 日产 逍客 2011款 1.6XE 风 5MT 2WD 东风日产 ... 1606 NaN 前置前驱
7015 1496 丰田 卡罗拉 2014款 1.6L CVT GL-i 一汽丰田 ... 1480 NaN 前置前驱
'''
#3.汽车自动挡和手动挡,那么分别有多少辆
# 选择没有缺失值的列
speedbox = guzi_data.groupby(by="speedbox").count()["brand"]
print(speedbox)
'''
speedbox
手动 1393
自动 5623
'''
#4.哪个城市二手车数量最多
# 按城市分组
city_g = guzi_data.groupby(by="city").count()["brand"].sort_values(ascending=False)
print(city_g)
'''
city
广州 2007
上海 1973
北京 1539
深圳 1497
'''
#5.获取深圳市最多的二手车品牌
sz_brand = sz_guzi_data.groupby(by="brand").count()["level"].sort_values(ascending=False)
print(sz_brand)
#argmax返回的是最大数的索引.argmax有一个参数axis,默认是0,表示第几维的最大值#print(df_catNames2.iloc[index,0])
print(type(sz_brand)) #<class 'pandas.core.series.Series'>
#print(sz_brand.index[0])
max_brand = sz_brand[sz_brand==max(sz_brand)]
print(max_brand.index.values)
#['东风日产' '长安福特']