查看原文
其他

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

LEMON Python数据之道 2022-04-24

用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重新排序

最终达到的效果如下:

数据清洗前

数据类型

  1. the shape of DataFrame:  (2000, 10)

  2. 年份                         int64

  3. Rank                       int64

  4. 公司名称(英文)                  object

  5. 公司名称(中文)                  object

  6. Country/area(国家或地区)       object

  7. Industry(行业)              object

  8. Sales (销售额)($bil十亿美元)     object

  9. Profits (利润)($bil)        object

  10. Assets 资产($bil)           object

  11. Market Value 市值($bil)    float64

  12. dtype: object

图1:

数据清洗后

数据类型

  1. Year               int64

  2. Rank               int64

  3. Company_cn_en     object

  4. Company_en        object

  5. Company_cn        object

  6. Country_cn_en     object

  7. Country_cn        object

  8. Country_en        object

  9. Industry_cn       object

  10. Industry_en       object

  11. Sales            float64

  12. Profits          float64

  13. Assets           float64

  14. Market_value     float64

图2:

数据清洗后, sales、Profits、Assets及Market_value列的数据均为数字类型,方便后续分析时计算使用。

3 2008年数据清洗的详细过程

导入相关python库

  1. import pandas as pd

  2. import numpy as np

从csv文件中读取数据

  1. df_2008 = pd.read_csv('./data/data_forbes_2008.csv', encoding='gbk', thousands=',')

  2. print('the shape of DataFrame: ', df_2008.shape)

  3. print(df_2008.dtypes)

  4. df_2008.head()

更新列名

  1. df_2008.columns = ['Year', 'Rank', 'Company_en', 'Company_cn','Country_en', 'Industry_en', 'Sales', 'Profits', 'Assets', 'Market_value']

  2. df_2008.head()

添加空白列,使之与其他年份的格式保持一致

  1. df_2008['Company_cn_en'], df_2008['Country_cn_en'], df_2008['Country_cn'], df_2008['Industry_cn'] = ['','','','']

  2. df_2008.head()

将字符串转换为数字类型

在前文《福布斯系列之数据清洗(1) | Python数据分析项目实战 》2007年的数据清洗过程中,单独针对'Sales','Profits'及'Assets'进行处理。

本文中,对处理过程进行了一些优化,通过for循环,一次性处理不同的字段,大大减少了代码量,以及程序的繁冗程度,使整个过程变得更简洁。

处理过程如下:

  1. col_digit = ['Sales', 'Profits', 'Assets', 'Market_value']

  2. for col in col_digit:

  3.    # 将数字后面的字母进行替换

  4.    df_2008[col] = df_2008[col].replace('([A-Za-z])', '', regex=True)

  5.    # 千分位数字的逗号被识别为string了,需要替换

  6.    df_2008[col] = df_2008[col].replace(',', '', regex=True)

  7.    #将数字型字符串转换为可进行计算的数据类型

  8.    df_2008[col] = pd.to_numeric(df_2008[col])

按指定list重新将columns进行排序

  1. # 按指定list重新将columns进行排序

  2. columns_sort = ['Year', 'Rank', 'Company_cn_en','Company_en',

  3.                'Company_cn', 'Country_cn_en', 'Country_cn',

  4.                'Country_en', 'Industry_cn', 'Industry_en',

  5.                'Sales', 'Profits', 'Assets', 'Market_value']

  6. df_2008 = df_2008.reindex(columns=columns_sort)

  7. print(df_2008.shape)

  8. print(df_2008.dtypes)

  9. df_2008.head()

4 后续

2009年和2010年的数据清洗过程跟2008年基本一致,处理过程就不在本文中描述了(提供源代码供参考)。

结合前文2007年的数据清洗,将2007-2010年的数据清洗的代码合并到一起,感兴趣的同学可以回复关键字获取相关代码。

细心的同学可能会发现,本次没有提到针对国家数据的规整,因为国家数据的规整将统一到最后进行处理,敬请后续关注。

公众号后台回复"2017038",获取本文的源代码及原始数据文件。

如果您喜欢我的文章,欢迎转发(据说转发的同学更有气质哦),哈~~

推荐阅读:


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存