用Python进行数据分析项目实战之福布斯系列文章,目前已发布的相关文章如下:

  1. 福布斯系列之数据分析思路篇

  2. 福布斯系列之数据采集

  3. 福布斯系列之数据完整性检查 | Python数据分析项目实战

  4. 福布斯系列之补充数据收集 | Python数据分析项目实战

  5. 福布斯系列之数据清洗(1) | Python数据分析项目实战

  6. Pandas数据处理实战:福布斯全球上市企业排行榜数据整理


1 前言


本文作为 数据清洗的第二篇,内容包含福布斯全球上市企业2000强排行榜数据中2008-2010年数据的初步处理过程。

福布斯全球上市企业2000强排行榜数据,从2007年到2017年,各个年份的数据都存在一些不规范的地方。

本文以2008年为例,描述2008年至2010年的数据清洗过程。

本项目运行环境:

  • windows7

  • jupyter notebook


2 数据清洗的目的

将不规范的数据进行处理,包括:

  1. 替换NaN值

  2. 将字符串型数字转换为数字类型

  3. 将数字后面多余的字母等文字剔除

  4. 将公司和国家进行拆分

  5. 按列名将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年上半年过去了,你读了多少本书?


©著作权归作者所有:来自51CTO博客作者mb5fe18e7c44408的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 福布斯系列之补充数据收集 | Python数据分析项目实战
  2. 福布斯系列之数据完整性检查 | Python数据分析项目实战
  3. 福布斯系列之数据清洗(1) | Python数据分析项目实战
  4. 想做疫情分析却没有数据?看这篇就够了
  5. LeetCode数据库篇|181超过经理收入的员工
  6. 实战|Python数据分析可视化并打包
  7. LeetCode数据库篇|175组合两个表
  8. 一道Leetcode数据库题的三种解法|文末送书
  9. 你在的城市撒币了吗?Python爬取全国各城市消费券发放数据并分析

随机推荐

  1. 【社区观察】未来Python2.7会收费?
  2. SpringCloud整体架构概览
  3. Postman:API接口调试利器
  4. 订单模块数据库表解析(三)
  5. Python社区软件包概况分析
  6. 【黑科技】不可能学不会的Python基础教程
  7. TensorFlow读写数据
  8. 从零开始学TensorFlow【01-搭建环境、Hel
  9. 我的Github开源项目,从0到20000 Star!
  10. 如何写出优雅的开源项目文档