福布斯系列之数据清洗(2) | Python数据分析项目实战
用Python进行数据分析项目实战之福布斯系列文章,目前已发布的相关文章如下:
福布斯系列之数据分析思路篇
福布斯系列之数据采集
福布斯系列之数据完整性检查 | Python数据分析项目实战
福布斯系列之补充数据收集 | Python数据分析项目实战
福布斯系列之数据清洗(1) | Python数据分析项目实战
Pandas数据处理实战:福布斯全球上市企业排行榜数据整理
1 前言
本文作为 数据清洗的第二篇,内容包含福布斯全球上市企业2000强排行榜数据中2008-2010年数据的初步处理过程。
福布斯全球上市企业2000强排行榜数据,从2007年到2017年,各个年份的数据都存在一些不规范的地方。
本文以2008年为例,描述2008年至2010年的数据清洗过程。
本项目运行环境:
windows7
jupyter notebook
2 数据清洗的目的
将不规范的数据进行处理,包括:
替换NaN值
将字符串型数字转换为数字类型
将数字后面多余的字母等文字剔除
将公司和国家进行拆分
按列名将DataFrame重新排序
最终达到的效果如下:
数据清洗前
数据类型
the shape of DataFrame: (2000, 10)年份 int64Rank int64公司名称(英文) object公司名称(中文) objectCountry/area(国家或地区) objectIndustry(行业) objectSales (销售额)($bil十亿美元) objectProfits (利润)($bil) objectAssets 资产($bil) objectMarket Value 市值($bil) float64dtype: object
图1:
数据清洗后
数据类型
Year int64Rank int64Company_cn_en objectCompany_en objectCompany_cn objectCountry_cn_en objectCountry_cn objectCountry_en objectIndustry_cn objectIndustry_en objectSales float64Profits float64Assets float64Market_value float64
图2:
数据清洗后, sales、Profits、Assets及Market_value列的数据均为数字类型,方便后续分析时计算使用。
3 2008年数据清洗的详细过程
导入相关python库
import pandas as pdimport numpy as np
从csv文件中读取数据
df_2008 = pd.read_csv('./data/data_forbes_2008.csv', encoding='gbk', thousands=',')print('the shape of DataFrame: ', df_2008.shape)print(df_2008.dtypes)df_2008.head()
更新列名
df_2008.columns = ['Year', 'Rank', 'Company_en', 'Company_cn','Country_en', 'Industry_en', 'Sales', 'Profits', 'Assets', 'Market_value']df_2008.head()
添加空白列,使之与其他年份的格式保持一致
df_2008['Company_cn_en'], df_2008['Country_cn_en'], df_2008['Country_cn'], df_2008['Industry_cn'] = ['','','','']df_2008.head()
将字符串转换为数字类型
在前文《福布斯系列之数据清洗(1) | Python数据分析项目实战 》2007年的数据清洗过程中,单独针对'Sales','Profits'及'Assets'进行处理。
本文中,对处理过程进行了一些优化,通过for循环,一次性处理不同的字段,大大减少了代码量,以及程序的繁冗程度,使整个过程变得更简洁。
处理过程如下:
col_digit = ['Sales', 'Profits', 'Assets', 'Market_value']for col in col_digit: # 将数字后面的字母进行替换 df_2008[col] = df_2008[col].replace('([A-Za-z])', '', regex=True) # 千分位数字的逗号被识别为string了,需要替换 df_2008[col] = df_2008[col].replace(',', '', regex=True) #将数字型字符串转换为可进行计算的数据类型 df_2008[col] = pd.to_numeric(df_2008[col])
按指定list重新将columns进行排序
# 按指定list重新将columns进行排序columns_sort = ['Year', 'Rank', 'Company_cn_en','Company_en', 'Company_cn', 'Country_cn_en', 'Country_cn', 'Country_en', 'Industry_cn', 'Industry_en', 'Sales', 'Profits', 'Assets', 'Market_value']df_2008 = df_2008.reindex(columns=columns_sort)print(df_2008.shape)print(df_2008.dtypes)df_2008.head()
4 后续
2009年和2010年的数据清洗过程跟2008年基本一致,处理过程就不在本文中描述了(提供源代码供参考)。
结合前文2007年的数据清洗,将2007-2010年的数据清洗的代码合并到一起,感兴趣的同学可以回复关键字获取相关代码。
细心的同学可能会发现,本次没有提到针对国家数据的规整,因为国家数据的规整将统一到最后进行处理,敬请后续关注。
公众号后台回复"2017038",获取本文的源代码及原始数据文件。
如果您喜欢我的文章,欢迎转发(据说转发的同学更有气质哦),哈~~
推荐阅读:
福布斯系列之数据分析思路篇
福布斯系列之数据采集
福布斯系列之数据完整性检查 | Python数据分析项目实战
福布斯系列之补充数据收集 | Python数据分析项目实战
福布斯系列之数据清洗(1) | Python数据分析项目实战
Pandas数据处理实战:福布斯全球上市企业排行榜数据整理
python求职Top10城市,来看看是否有你所在的城市
Pandas: 如何将一列中的文本拆分为多行?
2017年上半年过去了,你读了多少本书?
更多相关文章
- 福布斯系列之补充数据收集 | Python数据分析项目实战
- 福布斯系列之数据完整性检查 | Python数据分析项目实战
- 福布斯系列之数据清洗(1) | Python数据分析项目实战
- 想做疫情分析却没有数据?看这篇就够了
- LeetCode数据库篇|181超过经理收入的员工
- 实战|Python数据分析可视化并打包
- LeetCode数据库篇|175组合两个表
- 一道Leetcode数据库题的三种解法|文末送书
- 你在的城市撒币了吗?Python爬取全国各城市消费券发放数据并分析