the*_*oop 2 python columnname pandas
我正在努力理解列命名约定背后的概念,因为以下创建新列的尝试之一似乎失败了:
from numpy.random import randn
import pandas as pd
df = pd.DataFrame({'a':range(0,10,2), 'c':range(0,1000,200)},
columns=list('ac'))
df['b'] = 10*df.a
df
Run Code Online (Sandbox Code Playgroud)
给出以下结果:
然而,如果我试图通过替换以下行来创建列b,则没有错误消息,但数据帧df仅保留列a和c.
df.b = 10*df.a ### rather than the previous df['b'] = 10*df.a ###
Run Code Online (Sandbox Code Playgroud)
大熊猫做了什么,为什么我的命令不正确?
你做的是b为你的df 添加一个属性:
In [70]:
df.b = 10*df.a
df.b
Out[70]:
0 0
1 20
2 40
3 60
4 80
Name: a, dtype: int32
Run Code Online (Sandbox Code Playgroud)
但我们发现没有添加新列:
In [73]:
df.columns
Out[73]:
Index(['a', 'c'], dtype='object')
Run Code Online (Sandbox Code Playgroud)
这意味着KeyError如果我们尝试df['b'],我们会得到一个,为了避免这种歧义,你应该在分配时使用方括号.
例如,如果您有一列名为index或sum或max那么做df.index将返回指标,而不是索引列,同样df.sum和df.max会搞砸了这些DF方法.
我强烈建议总是使用方括号,它避免任何歧义,最新的ipython能够使用方括号解析列名.将数据帧视为系列的字典也很有用,其中使用方括号分配和返回列是有意义的
| 归档时间: |
|
| 查看次数: |
392 次 |
| 最近记录: |