Python數(shù)據(jù)分析答疑5:Pandas入門

8.23 第五課 Pandas入門


作業(yè)1:

使用如下代碼創(chuàng)建DataFrame,

gdp = {"country":["United States", "China", "Japan", "Germany", "United Kingdom"],

"capital":["Washington, D.C.", "Beijing", "Tokyo", "Berlin", "London"],

"population":[323, 1389, 127, 83, 66],

"gdp":[19.42, 11.8, 4.84, 3.42, 2.5],

"continent":["North America", "Asia", "Asia", "Europe", "Europe"]}

gdp_df = pd.DataFrame(gdp, columns = ["country", "capital", "population", "gdp", "continent"],

index = ["US", "CN", "JP", "DE", "UK"])

1. 選出亞洲或者北美洲的國家記錄 (提示:使用 isin 方法)

2. 選出gdp大于4兆億美元的國家

作業(yè)2:

使用鳶尾花數(shù)據(jù)集垦江,模仿老師課上的例子,完成如下作業(yè),

1. 畫出花萼寬度和長度的散點圖浪读,使用品種劃分數(shù)據(jù)

2. 畫出花萼的長度的箱線圖,使用品種劃分數(shù)據(jù)

作業(yè)3(選做):

根據(jù)今天課程學(xué)習(xí)內(nèi)容辛藻,對提供的 WordIndex.csv 數(shù)據(jù)進行簡單的查看和可視化分析碘橘。

注:數(shù)據(jù)已經(jīng)在第五課預(yù)習(xí)資料中提供,本題非常開放吱肌,大家可以從數(shù)據(jù)分析的角度痘拆,以文章的形式完成這項作業(yè)。提交文章鏈接即可氮墨。

利用課上已學(xué)知識纺蛆,完成一份數(shù)據(jù)分析文章。首先要了解這份數(shù)據(jù)的內(nèi)容规揪?然后可從自己關(guān)心的某些維度進行分析桥氏。最終得出結(jié)論。這個過程會很有趣的猛铅。


答疑Q&A目錄:

1字支,代碼運行理解

2,代碼運行出錯:NaN

3奸忽,代碼運行出錯

4堕伪,代碼運行理解:iloc/loc

5,代碼運行出錯

6栗菜,代碼運行出錯:SettingWithCopyWarning

7刃跛,代碼理解:dataframe

8,代碼運行出錯

9苛萎,代碼運行出錯

10桨昙,讀取文件

11检号,代碼理解:()/浮點數(shù)

12,代碼理解

13蛙酪,代碼出錯

14齐苛,代碼運行出錯

15,代碼運行出錯

16桂塞,代碼運行出錯:NaN

17凹蜂,代碼運行出錯

18,代碼理解:中擴號/圓括號

19阁危,代碼運行出錯


圖1

Q 1 :最后一題作業(yè)玛痊,有以下疑問(見圖):

1、圖是按照洲重新分類匯總后的數(shù)據(jù)狂打,對于GDP和人口擂煞,當(dāng)然可以直接sum,然對于Life_expectancy列趴乡,各洲的匯總數(shù)據(jù)对省,顯然應(yīng)該根據(jù)各國人口進行加權(quán)平均,生成新列晾捏,請問這個怎么弄蒿涎?

2、Y軸是人口數(shù)據(jù)惦辛,其label是'1e9'劳秋,但若顯示為‘十億’,會更直觀胖齐,請問如何改成這樣玻淑?

3、X軸是各洲GDP值匯總市怎,如何在X軸下端顯示具體的洲名岁忘,并能按照不同的顏色顯示?

4区匠、如果將X軸改為'continent‘干像,程序會報錯,請問是何原因驰弄?

第四問的報錯提醒:

KeyError Traceback (most recent call last)

/Users/guizhijie/anaconda/lib/python3.6/site-packages/pandas/core/indexes/base.py in get_loc(self, key, method, tolerance)

2392 try:-> 2393 return self._engine.get_loc(key)

2394 except KeyError: pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc (pandas/_libs/index.c:5239)()

pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc (pandas/_libs/index.c:5085)()

pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item (pandas/_libs/hashtable.c:20405)()

pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.PyObjectHashTable.get_item (pandas/_libs/hashtable.c:20359)()

KeyError: 'continent'

A:問題1麻汰,可以采用如下方式計算:(worldIndex['Life_expectancy'] * worldIndex['Population']).sum() / wordIndex['Population'].sum().

還有如果想找GDP和人口之間關(guān)系,畫散點圖會更直觀戚篙,這里的GDB只是作為標簽五鲫,并沒有按數(shù)值展示。

問題2岔擂,pd的plot方法似乎不支持位喂,我再找找方法浪耘,有結(jié)果通知你。

問題3塑崖,直接使用將代碼中的y="GDB_per_capita"替換為y="Continent"

問題4七冲,continent的大小寫錯了。如錯誤提示 KeyError


圖2

Q 2 :我給一個DataFrame按特定順序排列规婆;然后澜躺,我給一個DataFrame添加行標簽,為什么值全都變成NaN了呢抒蚜?DataFrame不是可以自動判定其格式嗎掘鄙?

對著課程和書看了好多遍,也找不到原因嗡髓。求幫忙操漠。

A1:是用DataFrame和Series的數(shù)據(jù)類型創(chuàng)建DataFrame是無法通過這種方式改變索引的,需要通過類似如下的方式修改:gdb_df.index = ['cn', 'us', ... ]
A2: 這是在賦值操作器贩,而不是修改行索引颅夺。給一個DataFrame賦值的時候朋截,不能用另一個DataFrame數(shù)據(jù)蛹稍,而應(yīng)該用字典。所以出錯了部服。修改標簽唆姐,就得按照老師上面的這種方法。


圖3

Q 3 :關(guān)于padas series判斷標簽是否在里面廓八,有個疑問:就是key值明明在series里面奉芦,怎么判定的結(jié)果還是false呢?

如上截圖(圖3)剧蹂,哪位高手看到解答下声功?

A:pandas Series不支持這種in方法,可以將其轉(zhuǎn)化為list宠叼,即 "Asia" in s.tolist() ?先巴,

或者使用pandas的==即可,s=="Asia"冒冬,返回的布爾型Series中如存在True伸蚯,即表示存在。

當(dāng)檢查多個元素是简烤,可以使用邏輯運算符 | 或者 isin剂邮,如下代碼:

s.Continent == "Asia" | s.Continent == "Afria"

s.Continent.isin(["Asia", "Afria"])

如上兩種方式都可獲取布爾型series,以此作為布爾索引即可實現(xiàn)內(nèi)容選擇横侦。


圖4
圖5

Q 4 :一個有趣的問題挥萌,如圖4和圖5:關(guān)于iloc跟loc選取行標簽的區(qū)別绰姻。目的:同樣選取前四行

A:為此處的行索引就是數(shù)字索引。

再解釋下iloc和loc:iloc表示根據(jù)索引數(shù)字位置查找引瀑,而loc是根據(jù)索引的值來查找龙宏。比如如下series:

0 1

1 2

2 8

這里的索引是0 1 2,而這些索引的位置也是 0 1 2伤疙,所以采用loc和iloc的結(jié)果是一樣的银酗。

如果有如下series:

us 1000

cn 2000

ua 2000

en 1000

這里的索引就是us cn ua en,而位置是0 1 2 3徒像,使用iloc和loc訪問的結(jié)果就不一樣了啊黍特。


圖6

Q 5 :WorldIndex顯示以洲匯總后的柱狀圖時,X軸設(shè)置為Continent后報錯的圖片(圖6).

注:列名拼寫沒有問題锯蛀,是從csv文件中復(fù)制的列名

A:直接使用cc.plot(kind='bar', figsize=(15, 8))灭衷。要是需要指定畫那個列的圖,使用如下形式:worldIndex.groupby('Continent').Population.sum().plot(kind="bar")

關(guān)于這里之所以沒有壽命和GDB是因為他們的數(shù)量太少旁涤,如果想顯示可以將每列轉(zhuǎn)化為百分比翔曲。


Q 6 :請問SettingWithCopyWarning警告是什么原因,該怎么解決這個問題呢劈愚?

另外瞳遍,這里的Warning已經(jīng)在pandas的源碼級了,可奇怪的是調(diào)用堆棧里為何沒有顯示觸發(fā)問題的代碼菌羽?這個能否通過某種設(shè)置顯示整個堆棧掠械?SettingWithCopyWarning報警的原因是新增的計算列不能在復(fù)制后的DataFrame里創(chuàng)建嗎?

重新改了下代碼注祖,將sum列在tradeLogData里添加就沒報警了

A1: 對的猾蒂,增加新列直接使用 tradeLogData['sum']= xxx 的形式。不能在copy視圖上添加新列是晨《遣ぃ可以在原始dataframe增加。


Q 7 :在第五課講述dataframe的gdp定義中罩缴,我有點困惑蚊逢。

gdp字典不是按照一條條記錄來做字典的key:value對,而是已每個記錄中的一個列作為鍵值對靴庆。當(dāng)然了时捌,讀到dataframe后顯示是對的,只是這么些有點反直覺炉抒。

請問這么寫是有什么原因么奢讨?還是因為dataframe的輸入需要?

A:其實兩種方式都可以,只不過還要是訪問行的key-value需要使用loc這個屬性來訪問拿诸。其實可以這樣理解扒袖,列是這個dataframe的屬性列,要最快訪問亩码,每一列的數(shù)據(jù)類型是相同的季率,但是要找每行的數(shù)據(jù)就會稍微麻煩點∶韫担總的來說和使用習(xí)慣有關(guān)吧飒泻。是不是感覺沒聽懂。記住這個用法就好了吏廉。


圖7

Q 8 : 在做5-1作業(yè)的時候泞遗,用布爾索引就出現(xiàn)這個問題(圖7)。不知道哪里錯了.

A:可以先仔細看下席覆,Continent那一列的變量類型史辙,數(shù)字型無法與字符型比較的。??可以看下錯誤的字面佩伤,不可用的類型比較聊倔。


Q 9 :在做5-3作業(yè)的時候出現(xiàn)TypeError: Empty 'DataFrame': no numeric data to plot 報錯,Google沒找到解決辦法

A:如果沒猜錯的話生巡,這里的Africa的DataFrame是空的耙蔑,原因:這行代碼中,Africa = df[df.Continent == "Africa "] "Africa"似乎多了一個空格障斋,其他幾行也是類似纵潦。確認下是不是這個錯誤徐鹤。


Q 10 :請問如何把文件和代碼放到一個文件夾里/第五課的數(shù)據(jù)怎么導(dǎo)入到python呢垃环?

A:和普通的文件操作是一樣的,可以拷貝至對應(yīng)的文件夾下返敬∷熳或者在notebook環(huán)境中有個upload功能,也可以實現(xiàn)文件的上傳劲赠。


Q 11 :大家知道為什么使用numpy創(chuàng)建二維數(shù)組要用兩個圓括號么涛目?

另外隨機的浮點數(shù)都是8位的是因為語言是64位的原因么?

A:里面的圓括號表示參數(shù)凛澎,這個參數(shù)是一個元組霹肝,可以回顧一下元組的表示方式。浮點數(shù)是8字節(jié)大小塑煎,每個字節(jié)8位沫换,也就是64位大小,和語言沒有直接關(guān)系最铁,主要和計算機有關(guān)讯赏,太深入的計算機知識可不用探究垮兑。

元組和列表中的元素可以是int值,想更詳細了解元組漱挎,可以看看這 https://www.w3cschool.cn/python/python-tuples.html


圖8

Q 12 :圖8系枪,pandas新增一列做法。

疑問1:gdp_df["rank"] = "Top5 GDP" 為何輸入這個磕谅,新增的數(shù)據(jù)是列而不是行私爷?而gdp_df[0]切片獲取的數(shù)據(jù)卻是每一行的數(shù)據(jù)

疑問2: 需要新添加一行數(shù)據(jù)應(yīng)該如何實現(xiàn)?含下面各項參數(shù)("country": "capital":"population":"gdp":"continent": )膊夹,發(fā)現(xiàn)對于字典來說当犯,add跟append都不支持。

A :疑問1:這個當(dāng)做規(guī)律記住就好了割疾,算是設(shè)計者方便大家的使用嚎卫。而沒有局限于某些固有的思維。

問題2:可以使用append實現(xiàn)宏榕,先將字段轉(zhuǎn)化為series的變量s拓诸,然后使用df = df.append(s),即可實現(xiàn)添加麻昼。


Q 13 :選做題讀取文件時出現(xiàn)問題:FileNotFoundError: File b'WorldIndex.csv' does not exist

A :確認下奠支,文件和代碼是否在同一文件夾下,以及文件名是否正確抚芦。


圖9

Q 14 :為什么這里重新定義的colums沒有大小寫呢倍谜?

A :拼錯了columns


圖10

Q 15 :照著打代碼的時候發(fā)現(xiàn)了兩個問題,在圖片里(圖10)????能否幫我解答一下叉抡?謝謝~

A:shape(0,3)是不是表示就是空的了尔崔,把>10 換成>=再加上print試試。


圖12

Q 16 :運行著GDP數(shù)據(jù)就出現(xiàn)NaN的問題褥民,上一個表格都沒有問題

A :‘GDP’這個字符改成小寫季春,你應(yīng)該是前面就是小寫,這里的大寫識別不出來消返。這里是使用gdb_df.columns的方式修改的载弄,不是在創(chuàng)建的時候修改的,在創(chuàng)建的時候撵颊,需要和字典一致的宇攻,在創(chuàng)建之后呢?你就可以使用gdp_df.columns = []的形式對列名進行修改了倡勇。


圖13

Q 17 :上面兩個圖(圖13)所示逞刷,為何loc選列標簽會有錯誤,但是選行標簽卻沒問題

A :.loc[["us"]] 應(yīng)該使用雙中括號


圖15

Q 18 : 圖15,這里小括號行 亲桥,? 中括號為什么就不行呢洛心?老是搞不清什么時候該中括號 ,什么時候該小括號题篷。

A1:小括號是函數(shù)词身,中括號是定位

A2:()&()是講and,or番枚,not時法严,老師寫的固定的表達法。我當(dāng)定理記下來的葫笼,沒必要研究那么細


圖16
圖17

Q 19 :上面兩個圖(圖16深啤,圖17)所示,我這是哪里出問題了路星?

A:少了一個continent




今天整理的時候溯街,遇到一個問題,跑去問老師洋丐,老師說呈昔,你到這個時候應(yīng)該能夠解答這個問題了。然而友绝,我盯著它看十幾分鐘堤尾,腦子動不了。所以我放棄了那個問題迁客。郭宝。。

唉 學(xué)習(xí)路上那個能力超強的怪獸又來了掷漱。粘室。。祝我好運切威,多點耐心育特。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市先朦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌犬缨,老刑警劉巖喳魏,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異怀薛,居然都是意外死亡刺彩,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來创倔,“玉大人嗡害,你說我怎么就攤上這事∑枞粒” “怎么了霸妹?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長知押。 經(jīng)常有香客問我叹螟,道長,這世上最難降的妖魔是什么台盯? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任罢绽,我火速辦了婚禮,結(jié)果婚禮上静盅,老公的妹妹穿的比我還像新娘良价。我一直安慰自己,他們只是感情好蒿叠,可當(dāng)我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布棚壁。 她就那樣靜靜地躺著,像睡著了一般栈虚。 火紅的嫁衣襯著肌膚如雪袖外。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天魂务,我揣著相機與錄音曼验,去河邊找鬼。 笑死粘姜,一個胖子當(dāng)著我的面吹牛鬓照,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播孤紧,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼豺裆,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了号显?” 一聲冷哼從身側(cè)響起臭猜,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎押蚤,沒想到半個月后蔑歌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡揽碘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年次屠,在試婚紗的時候發(fā)現(xiàn)自己被綠了园匹。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡劫灶,死狀恐怖裸违,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情本昏,我是刑警寧澤供汛,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站凛俱,受9級特大地震影響紊馏,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蒲犬,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一朱监、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧原叮,春花似錦赫编、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至唯欣,卻和暖如春嘹吨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背境氢。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工蟀拷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人萍聊。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓问芬,卻偏偏與公主長得像,于是被迫代替她去往敵國和親寿桨。 傳聞我的和親對象是個殘疾皇子此衅,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內(nèi)容