零基礎學習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魚 - 博客園假設我們有個客戶郵箱表如下
添加一列各客戶的郵箱歸屬商。
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 行列定義為什麼每次都不同?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
※巨變將至!未來人類不分階層,只分物種
※在輿情引導中發揮大數據技術優勢