日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2025/7/14 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Pandas数据处理实战:福布斯全球上市企业排行榜数据整理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

手頭現在有一份福布斯2016年全球上市企業2000強排行榜的數據,但原始數據并不規范,需要處理后才能進一步使用。

本文通過實例操作來介紹用pandas進行數據整理。

照例先說下我的運行環境,如下:

  • windows 7, 64位
  • python 3.5
  • pandas 0.19.2版本

在拿到原始數據后,我們先來看看數據的情況,并思考下我們需要什么樣的數據結果。

下面是原始數據:

在本文中,我們需要以下的初步結果,以供以后繼續使用。

可以看到,原始數據中,跟企業相關的數據中(“Sales”,“Profits”,“Assets”,“Market_value”),目前都是不是可以用來計算的數字類型。

原始內容中包含貨幣符號”$“,“-”,純字母組成的字符串以及其他一些我們認為異常的信息。更重要的是,這些數據的單位并不一致。分別有以“B”(Billion,十億)和“M”(Million,百萬)表示的。在后續計算之前需要進行單位統一。

1 處理方法 Method-1

首先想到的處理思路就是將數據信息分別按十億(’B’)和百萬(‘M’)進行拆分,分別進行處理,最后在合并到一起。過程如下所示。

  • 加載數據,并添加列的名稱
import pandas as pddf_2016 = pd.read_csv('data_2016.csv', encoding='gbk',header=None)# 更新列名 df_2016.columns = ['Year', 'Rank', 'Company_cn','Company_en','Country_en', 'Sales', 'Profits', 'Assets', 'Market_value']print('the shape of DataFrame: ', df_2016.shape) print(df_2016.dtypes) df_2016.head(3)
  • 獲取單位為十億(’B’)的數據
# 數據單位為 B的數據(Billion,十億) df_2016_b = df_2016[df_2016['Sales'].str.endswith('B')] print(df_2016_b.shape) df_2016_b
  • 獲取單位為百萬(‘M’)的數據
# 數據單位為 M的數據(Million,百萬) df_2016_m = df_2016[df_2016['Sales'].str.endswith('M')] print(df_2016_m.shape) df_2016_m

這種方法理解起來比較簡單,但操作起來會比較繁瑣,尤其是如果有很多列數據需要處理的話,會花費很多時間。

進一步的處理,我這里就不描述了。當然,各位可以試試這個方法。

下面介紹稍微簡單一點的方法。

2 處理方法 Method-2

2.1 加載數據

第一步還是加載數據,跟Method-1是一樣的。

下面來處理’Sales’列

2.2 替換相關的異常字符

首先是替換相關的異常字符,包括美元的貨幣符號’$’,純字母的字符串’undefined’,以及’B’。 這里,我們想統一把數據的單位整理成十億,所以’B’可以直接進行替換。而’M’需要更多的處理步驟。

2.3 處理’M’相關的數據

處理含有百萬“M”為單位的數據,即以“M”結尾的數據,思路如下:

(1)設定查找條件mask;

(2)替換字符串“M”為空值

(3)用pd.to_numeric()轉換為數字

(4)除以1000,轉換為十億美元,與其他行的數據一致

上面兩個步驟相關的代碼如下:

# 替換美元符號 df_2016['Sales'] = df_2016['Sales'].str.replace('$','')# # 查看異常值,均為字母(“undefined”) # df_2016[df_2016['Sales'].str.isalpha()]# 替換異常值“undefined”為空白 # df_2016['Sales'] = df_2016['Sales'].str.replace('undefined','') df_2016['Sales'] = df_2016['Sales'].str.replace('^[A-Za-z]+$','')# 替換符號十億美元“B”為空白,數字本身代表的就是十億美元為單位 df_2016['Sales'] = df_2016['Sales'].str.replace('B','')# 處理含有百萬“M”為單位的數據,即以“M”結尾的數據 # 思路: # (1)設定查找條件mask; # (2)替換字符串“M”為空值 # (3)用pd.to_numeric()轉換為數字 # (4)除以1000,轉換為十億美元,與其他行的數據一致 mask = df_2016['Sales'].str.endswith('M') df_2016.loc[mask, 'Sales'] = pd.to_numeric(df_2016.loc[mask, 'Sales'].str.replace('M', ''))/1000df_2016['Sales'] = pd.to_numeric(df_2016['Sales']) print('the shape of DataFrame: ', df_2016.shape) print(df_2016.dtypes) df_2016.head(3)

用同樣類似的方法處理其他列

可以看到,這個方法比第一種方法還是要方便很多。當然,這個方法針對DataFrame的每列數據都要進行相關的操作,如果列數多了,也還是比較繁瑣的。

有沒有更方便一點的方法呢。 答案是有的。

插播一條硬廣:技術文章轉發太多。文章來自微信公眾號“Python數據之道”(ID:PyDataRoad)。

?

3 處理方法 Method-3

在Method-2的基礎上,將處理方法寫成更通用的數據處理函數,根據數據的結構,拓展更多的適用性,則可以比較方便的處理相關數據。

3.1 加載數據

第一步還是加載數據,跟Method-1是一樣的。

3.2 編寫數據處理的自定義函數

參考Method-2的處理過程,編寫數據處理的自定義函數’pro_col’,并在Method-2的基礎上拓展其他替換功能,使之適用于這四列數據(“Sales”,“Profits”,“Assets”,“Market_value”)。

函數編寫的代碼如下:

def pro_col(df, col): # 替換相關字符串,如有更多的替換情形,可以自行添加df[col] = df[col].str.replace('$','')df[col] = df[col].str.replace('^[A-Za-z]+$','')df[col] = df[col].str.replace('B','')# 注意這里是'-$',即以'-'結尾,而不是'-',因為有負數df[col] = df[col].str.replace('-$','')df[col] = df[col].str.replace(',','')# 處理含有百萬“M”為單位的數據,即以“M”結尾的數據# 思路:# (1)設定查找條件mask;# (2)替換字符串“M”為空值# (3)用pd.to_numeric()轉換為數字# (4)除以1000,轉換為十億美元,與其他行的數據一致mask = df[col].str.endswith('M')df.loc[mask, col] = pd.to_numeric(df.loc[mask, col].str.replace('M',''))/1000# 將字符型的數字轉換為數字類型df[col] = pd.to_numeric(df[col])return df

3.3 將自定義函數進行應用

針對DataFrame的每列,應用該自定義函數,進行數據處理,得到需要的結果。

pro_col(df_2016, 'Sales') pro_col(df_2016, 'Profits') pro_col(df_2016, 'Assets') pro_col(df_2016, 'Market_value')print('the shape of DataFrame: ', df_2016.shape) print(df_2016.dtypes) df_2016.head()

當然,如果DataFrame的列數特別多,可以用for循環,這樣代碼更簡潔。代碼如下:

cols = ['Sales', 'Profits', 'Assets', 'Market_value'] for col in cols:pro_col(df_2016, col)print('the shape of DataFrame: ', df_2016.shape) print(df_2016.dtypes) df_2016.head()

最終處理后,獲得的數據結果如下:

?

轉載于:https://www.cnblogs.com/lemonbit/p/7147154.html

總結

以上是生活随笔為你收集整理的Pandas数据处理实战:福布斯全球上市企业排行榜数据整理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。