零基礎學習Python數據分析:數據處理模塊Pandas使用(2)

Python Data Analysis Library 或 pandas 是基於NumPy 的一種工具,該工具是為了解決數據分析任務而創建的。

Pandas 納入了大量庫和一些標準的數據模型,提供了高效地操作大型數據集所需的工具。pandas提供了大量能使我們快速便捷地處理數據的函數和方法。你很快就會發現,它是使Python成為強大而高效的數據分析環境的重要因素之一。

在這一Lesson的最後,你將了解如何提取或創建數據表、匯總數據和使用合併從多個表中合併數據。本單元包含三個Lesson。

Unit 2 Data Manipulation with Pandas


Lesson 2 Modifying DataFrames in Pandas

一、DataFrame添加行與列

假設我們擁有一個五金店,下面這個DataFrame包含了庫存信息:

想為其增加一列產品質量信息,則

df[Quantity] = [100, 150, 50, 35]print(df)

我們也可以像Excel下拉操作一樣添加一個具有相同值的列,假設我們知道所有的產品目前都在庫。我們可以添加一個列:

df[In Stock?] = True

像Excel一樣,我們可以利用現有列之間的運算得到新的列:

df[Sales Tax] = df[Price]* 0.075

除運算外,我們還有一些操作列和修改列的命令

假設本五金店有客戶及其聯繫方式:

但是客戶名既有大寫也有小寫,我想將其全部改為大寫字母,我們可以使用apply語句調整

直接在原列上進行調整

df[Name] = df[Name].apply(upper)

生成新的一列

df[Uppercase Name] = df[Name].apply(upper)

二、用Lambda表達式調整和增加列

Lambda表達式

我自己的簡單理解它就是一個簡單地臨時使用的函數。它能夠接受輸入值,並返回輸出。

舉例:

add_two = lambda my_input: my_input + 2print(add_two(3))print(add_two(100))print(add_two(-2))

則返回值為5,102,0

is_substring = lambda my_string: my_string in "This is the master string"print(is_substring(I))print(is_substring(am))print(is_substring(the))print(is_substring(master))

返回值為False,False,True,True

像這種方式,我們可以自由地創建Lambda函數。

mylambda = lambda x: x[0]+x[len(x)-1]print mylambda(Hello World)#Hd

我創建了一個返回首字母和末尾字母的Lambda函數。

If statement在Lambda函數中的使用,我們可以通過使用if語句使我們的Lambda表達式更複雜。

check_if_A_grade = lambda grade: Got an A! if grade >= 90 else Did not get an A...#<WHAT TO RETURN IF STATEMENT IS TRUE> if <IF STATEMENT> else <WHAT TO RETURN IF STATEMENT IS FALSE>print(check_if_A_grade(91))print(check_if_A_grade(70))print(check_if_A_grade(20))

返回值為Got an A! , Did not get an A... , Did not get an A...

myfunction = lambda x: 40 + (x - 40) * 1.50 if x > 40 else x

因為咱不是python編程人士,所以必要時需要參考內置函數大全:

python內置函數大全 - py魚 - 博客園www.cnblogs.com

假設我們有個客戶郵箱表如下

添加一列各客戶的郵箱歸屬商。

df[Email Provider] = df[Email].apply(lambda x: x.split(@)[-1])

因此,我們也可以利用各種Lambda函數添加新列。

get_last_name = lambda x: x.split()[-1]df[last_name] = df.name.apply(get_last_name)


axis參數

假設我們有一張雜貨清單表:

如果我們想在每行加上稅額,我們需要看兩欄:Price&Is taxed?

如果Is taxed=Yes,那麼我們要增加1.075的價格(7.5%的銷售稅)。

如果Is taxed=No,我們不增加價格。

我們可以利用Lambda函數和參數axis=1添加新的一列價格。

df[Price with Tax] = df.apply(lambda row: row[Price] * 1.075 if row[Is taxed?] == Yes else row[Price], axis=1)

簡單來理解axis=1是按行計算,axis=0是按列輸入Lambda函數。簡單理解為:

  • 使用0值表示沿著每一列或行標籤索引值向下執行方法
  • 使用1值表示沿著每一行或者列標籤模向執行對應的方法

不寫的時候默認axis=0

看這個答主給出的例子差不多就懂了:

python數據分析里axis=0/1 行列定義為什麼每次都不同?www.zhihu.com圖標

import pandas as pddf = pd.read_csv(employees.csv)total_earned=lambda row: ((row[hours_worked]-40)*1.5+40)*row[hourly_wage] if row[hours_worked]>40 else row[hours_worked]*row[hourly_wage]df[total_earned]=df.apply(total_earned,axis=1)print df

三、修改列名

重命名列名可以使用的是.columns語句

df = pd.DataFrame({ name: [John, Jane, Sue, Fred], age: [23, 29, 21, 18]})df.columns = [First Name, Age]

同樣的,使用.rename語句也能起到同樣的效果

df = pd.DataFrame({ name: [John, Jane, Sue, Fred], age: [23, 29, 21, 18]})df.rename(columns={ name: First Name, age: Age}, inplace=True)

Ps.單單使用.rename語句會生成一個新的DataFrame而不是在原DataFrame上進行修改,因此有inplace=True語句。即使修改一列時,也要寫columns(因為我老忘s)

兩種修改方式中,後者更受推崇。因為能一列一列修改,方便遇到錯誤時修正。


本節的學習對我和一些不熟悉Python語句的人來說需要多加練習。我在學習這一節時,犯了不少錯誤,比如

import pandas as pdorders = pd.read_csv(shoefly.csv)print orders.head(5)shoe_source=lambda row: animal if row[shoe_material] == leather else veganorders[shoe_source]=orders[shoe_material].apply(shoe_source,axis=1)print orders.head(5)

以上為錯誤代碼。對一個行使用.apply語句時lambda的輸入值為『x』(所在行值)而不能寫row。對整個DataFrame使用.apply語句時則可以寫row,正確代碼為

orders = pd.read_csv(shoefly.csv)print orders.head(5)shoe_source=lambda x: animal if x == leather else veganorders[shoe_source]=orders[shoe_material].apply(shoe_source)print orders.head(5)

或者

orders = pd.read_csv(shoefly.csv)print orders.head(5)shoe_source=lambda row: animal if row[shoe_material] == leather else veganorders[shoe_source]=orders.apply(shoe_source,axis=1)print orders.head(5)

要想學好Python數據分析,需要不斷地練習,經常使用練習是快速提升數據分析的好方法。敲代碼中。。。。。


推薦閱讀:

大數據計數原理1+0=1這你都不會算(六)No.57
大數據、沉浸式學習、物聯網……美國教育從業者眼中的2018年七大教育科技趨勢
AI時代:聊聊大數據中的MapReduce
巨變將至!未來人類不分階層,只分物種
在輿情引導中發揮大數據技術優勢

TAG:數據分析 | 大數據 | 商業分析 |