python花萼长度表_Python 数据分析答疑 5:Pandas入门

8.23 第五课 Pandas入门作业 1:

使用如下代码创建 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 兆亿美元的国家

作业 2:

使用鸢尾花数据集,模仿老师课上的例子,完成如下作业,

1. 画出花萼宽度和长度的散点图,使用品种划分数据

2. 画出花萼的长度的箱线图,使用品种划分数据

作业 3(选做):

根据今天课程学习内容,对提供的 WordIndex.csv 数据进行简单的查看和可视化分析。

注:数据已经在第五课预习资料中提供,本题非常开放,大家可以从数据分析的角度,以文章的形式完成这项作业。提交文章链接即可。

利用课上已学知识,完成一份数据分析文章。首先要了解这份数据的内容?然后可从自己关心的某些维度进行分析。最终得出结论。这个过程会很有趣的。

答疑 Q&A 目录:1,代码运行理解

2,代码运行出错:NaN

3,代码运行出错

4,代码运行理解:iloc/loc

5,代码运行出错

6,代码运行出错:SettingWithCopyWarning

7,代码理解:dataframe

8,代码运行出错

9,代码运行出错

10,读取文件

11,代码理解:()/浮点数

12,代码理解

13,代码出错

14,代码运行出错

15,代码运行出错

16,代码运行出错:NaN

17,代码运行出错

18,代码理解:中扩号/圆括号

19,代码运行出错

图 1Q 1 :最后一题作业,有以下疑问(见图):

1、图是按照洲重新分类汇总后的数据,对于 GDP 和人口,当然可以直接 sum,然对于 Life_expectancy 列,各洲的汇总数据,显然应该根据各国人口进行加权平均,生成新列,请问这个怎么弄?

2、Y 轴是人口数据,其 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 和人口之间关系,画散点图会更直观,这里的 GDB 只是作为标签,并没有按数值展示。

问题2,pd 的 plot 方法似乎不支持,我再找找方法,有结果通知你。

问题3,直接使用将代码中的 y="GDB_per_capita" 替换为 y="Continent"

问题4,continent 的大小写错了。如错误提示 KeyError

图 2Q 2 :我给一个 DataFrame 按特定顺序排列;然后,我给一个 DataFrame 添加行标签,为什么值全都变成 NaN 了呢?DataFrame 不是可以自动判定其格式吗?

对着课程和书看了好多遍,也找不到原因。求帮忙。

A1:是用 DataFrame 和 Series 的数据类型创建 DataFrame 是无法通过这种方式改变索引的,需要通过类似如下的方式修改:gdb_df.index = ['cn', 'us', ... ]

A2: 这是在赋值操作,而不是修改行索引。给一个 DataFrame 赋值的时候,不能用另一个 DataFrame 数据,而应该用字典。所以出错了。修改标签,就得按照老师上面的这种方法。图 3Q 3 :关于 padas series 判断标签是否在里面,有个疑问:就是 key 值明明在 series 里面,怎么判定的结果还是 false 呢?

如上截图(图 3),哪位高手看到解答下?

A:pandas Series 不支持这种 in 方法,可以将其转化为 list,即 "Asia" in s.tolist() ,

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

当检查多个元素是,可以使用逻辑运算符 | 或者 isin,如下代码:

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

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

如上两种方式都可获取布尔型 series,以此作为布尔索引即可实现内容选择。图 4图 5Q 4 :一个有趣的问题,如图 4 和图 5:关于 iloc 跟 loc 选取行标签的区别。目的:同样选取前四行

A:为此处的行索引就是数字索引。

再解释下 iloc 和 loc:iloc 表示根据索引数字位置查找,而 loc 是根据索引的值来查找。比如如下 series:

0 1

1 2

2 8

这里的索引是 0 1 2,而这些索引的位置也是 0 1 2,所以采用 loc 和 iloc 的结果是一样的。

如果有如下 series:

us 1000

cn 2000

ua 2000

en 1000

这里的索引就是 us cn ua en,而位置是 0 1 2 3,使用 iloc 和 loc 访问的结果就不一样了啊。图 6Q 5 :WorldIndex 显示以洲汇总后的柱状图时,X 轴设置为 Continent 后报错的图片(图6).

注:列名拼写没有问题,是从 csv 文件中复制的列名

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

关于这里之所以没有寿命和 GDB 是因为他们的数量太少,如果想显示可以将每列转化为百分比。

Q 6 :请问 SettingWithCopyWarning 警告是什么原因,该怎么解决这个问题呢?

另外,这里的 Warning 已经在 pandas 的源码级了,可奇怪的是调用堆栈里为何没有显示触发问题的代码?这个能否通过某种设置显示整个堆栈?SettingWithCopyWarning 报警的原因是新增的计算列不能在复制后的 DataFrame 里创建吗?

重新改了下代码,将 sum 列在 tradeLogData 里添加就没报警了

A1: 对的,增加新列直接使用 tradeLogData['sum']= xxx 的形式。不能在 copy 视图上添加新列。可以在原始 dataframe 增加。

Q 7 :在第五课讲述 dataframe 的 gdp 定义中,我有点困惑。

gdp 字典不是按照一条条记录来做字典的 key:value 对,而是已每个记录中的一个列作为键值对。当然了,读到 dataframe 后显示是对的,只是这么些有点反直觉。

请问这么写是有什么原因么?还是因为 dataframe 的输入需要?

A:其实两种方式都可以,只不过还要是访问行的 key-value 需要使用 loc 这个属性来访问。其实可以这样理解,列是这个 dataframe 的属性列,要最快访问,每一列的数据类型是相同的,但是要找每行的数据就会稍微麻烦点。总的来说和使用习惯有关吧。是不是感觉没听懂。记住这个用法就好了。图 7Q 8 : 在做 5-1 作业的时候,用布尔索引就出现这个问题(图 7)。不知道哪里错了.

A:可以先仔细看下,Continent 那一列的变量类型,数字型无法与字符型比较的。 可以看下错误的字面,不可用的类型比较。

Q 9 :在做 5-3 作业的时候出现 TypeError: Empty 'DataFrame': no numeric data to plot 报错,Google 没找到解决办法

A:如果没猜错的话,这里的 Africa 的 DataFrame 是空的,原因:这行代码中,Africa = df[df.Continent == "Africa "] "Africa" 似乎多了一个空格,其他几行也是类似。确认下是不是这个错误。

Q 10 :请问如何把文件和代码放到一个文件夹里/第五课的数据怎么导入到 python 呢?

A:和普通的文件操作是一样的,可以拷贝至对应的文件夹下。或者在 notebook 环境中有个 upload 功能,也可以实现文件的上传。

Q 11 :大家知道为什么使用 numpy 创建二维数组要用两个圆括号么?

另外随机的浮点数都是 8 位的是因为语言是 64 位的原因么?

A:里面的圆括号表示参数,这个参数是一个元组,可以回顾一下元组的表示方式。浮点数是 8 字节大小,每个字节 8 位,也就是 64 位大小,和语言没有直接关系,主要和计算机有关,太深入的计算机知识可不用探究。

元组和列表中的元素可以是 int 值,想更详细了解元组,可以看看这 https://www.w3cschool.cn/python/python-tuples.html

图 8Q 12 :图 8,pandas 新增一列做法。

疑问1:gdp_df["rank"] = "Top5 GDP" 为何输入这个,新增的数据是列而不是行?而gdp_df[0] 切片获取的数据却是每一行的数据

疑问2: 需要新添加一行数据应该如何实现?含下面各项参数("country": "capital":"population":"gdp":"continent": ),发现对于字典来说,add 跟 append 都不支持。

A :疑问 1:这个当做规律记住就好了,算是设计者方便大家的使用。而没有局限于某些固有的思维。

问题 2:可以使用 append 实现,先将字段转化为 series 的变量 s,然后使用 df = df.append(s),即可实现添加。

Q 13 :选做题读取文件时出现问题:FileNotFoundError: File b'WorldIndex.csv' does not exist

A :确认下,文件和代码是否在同一文件夹下,以及文件名是否正确。图 9Q 14 :为什么这里重新定义的 colums 没有大小写呢?

A :拼错了 columns

图 10Q 15 :照着打代码的时候发现了两个问题,在图片里(图 10) 能否帮我解答一下?谢谢~

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

图 12Q 16 :运行着 GDP 数据就出现 NaN 的问题,上一个表格都没有问题

A :‘GDP’这个字符改成小写,你应该是前面就是小写,这里的大写识别不出来。这里是使用 gdb_df.columns 的方式修改的,不是在创建的时候修改的,在创建的时候,需要和字典一致的,在创建之后呢?你就可以使用 gdp_df.columns = [] 的形式对列名进行修改了。

图 13Q 17 :上面两个图(图 13)所示,为何 loc 选列标签会有错误,但是选行标签却没问题

A :.loc[["us"]] 应该使用双中括号

图 15Q 18 : 图 15,这里小括号行 , 中括号为什么就不行呢?老是搞不清什么时候该中括号 ,什么时候该小括号。

A1:小括号是函数,中括号是定位

A2:()&()是讲 and,or,not 时,老师写的固定的表达法。我当定理记下来的,没必要研究那么细

图 16图 17Q 19 :上面两个图(图 16,图 17)所示,我这是哪里出问题了?

A:少了一个 continent

今天整理的时候,遇到一个问题,跑去问老师,老师说,你到这个时候应该能够解答这个问题了。然而,我盯着它看十几分钟,脑子动不了。所以我放弃了那个问题。。。

唉 学习路上那个能力超强的怪兽又来了。。。祝我好运,多点耐心。

Python数据分析答疑5:Pandas入门​www.jianshu.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值