首页 新闻 会员 周边

Python修改数据与引用——df.列名和df['列名']的区别

0
悬赏园豆:100 [已解决问题] 解决于 2021-11-08 09:33

p1

p2

p3

p4

p5

问题:为什么p3中full.head()没有FareCut和AgeCut,如p4的引用找不到full['FareCut'],而p5中full.FareCut可以?

舞拉拉YO的主页 舞拉拉YO | 初学一级 | 园豆:112
提问于:2021-11-06 10:12
< >
分享
最佳答案
1

full.FareCut.head()还有值,但是full['FareCut'].head()找不到值。这个重现不出来。
能把从读取文件开始能重现这个现象的所有步骤都列出来吗?

收获园豆:88
wang_yb | 老鸟四级 |园豆:4891 | 2021-11-07 00:26

你好,我重新整理了一下问题。你能帮我看一下吗?

舞拉拉YO | 园豆:112 (初学一级) | 2021-11-07 10:05

@demons16: 你好,整理的挺清晰的,回复有点晚,不好意思。
是这样的,dataframe中是不支持通过属性创建新的列,只能通过属性来获取列(列名符合变量名的情况下)。
也就是 full['AgeCut'] = xxx 是可以创建新的列,而 full.AgeCut是不能创建新的列的。

使用 full.AgeCut 创建新的列时,应该会报类似如下的警告:

<ipython-input-10-da4798d43d6a>:1: UserWarning: Pandas doesn't allow columns to be created via a new attribute name - see https://pandas.pydata.org/pandas-docs/stable/indexing.html#attribute-access

你执行的时候没报警告, 是因为在 p1 的步骤中,创建过 AgeCut 和 FareCut 列。
p3 虽然没有报错,但是其实执不执行都一样,不会对 full 的数据有影响。
你可以试试,重新进入 ipython环境,在 p1 之前执行 p3, 那样应该可以看到我上面的那个错误。

wang_yb | 园豆:4891 (老鸟四级) | 2021-11-07 23:55

@demons16: 错误信息中的这个url: https://pandas.pydata.org/pandas-docs/stable/indexing.html#attribute-access
可以了解下,里面介绍了通过属性的方式来操作 dataframe的一些限制

wang_yb | 园豆:4891 (老鸟四级) | 2021-11-07 23:56

@demons16: 补充下,对于p4 和 p5 的现象。
p4, 由于 full.AgeCut 是无法创建数据列的,所以 p4 中通过 full['AgeCut'] 获取数据列的信息报错,因为没有 AgeCut 这个列。

p5, full.AgeCut 虽然没有创建数据列,但是给 full 对象创建了一个属性(AgeCut)。
可以通过 dir(full) 看看,里面应该包含了你创建的 AgeCut 和 FareCut 属性了。
full.AgeCut 取的是 full 对象的 AgeCut 属性的值,不是 full 对象中数据矩阵中的值

wang_yb | 园豆:4891 (老鸟四级) | 2021-11-08 00:05

@wang_yb: 非常感谢你,愿意抽时间回答我的问题。我知道我哪里错了,也知道以后如何避免了。关于在p1 之前执行 p3的时候报错问题,一开始我是看到了的,但因为有值,只是UserWarning我就没管,选择性瞎眼。你解释的非常详解,谢谢!

舞拉拉YO | 园豆:112 (初学一级) | 2021-11-08 09:31
其他回答(1)
0
收获园豆:12
小小咸鱼YwY | 园豆:3210 (老鸟四级) | 2021-11-06 13:43

你好,我重新整理了一下问题,你能帮我看一下吗?

支持(0) 反对(0) 舞拉拉YO | 园豆:112 (初学一级) | 2021-11-07 10:11

@demons16: 别用这个调试,直接用pycharm,这个会存在缓存,另外的话直接搜索pd.qcut,pdcut区别,然后自己实践看结果比我将100倍有用哈

支持(0) 反对(0) 小小咸鱼YwY | 园豆:3210 (老鸟四级) | 2021-11-07 20:07

@小小咸鱼YwY: 好的,这个区别我知道了,谢谢!

支持(0) 反对(0) 舞拉拉YO | 园豆:112 (初学一级) | 2021-11-08 09:21
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册