KeyError帖子的解决方案都没有解决我的问题因此这个问题:
我在Pandas DataFrame中有以下列:
df['EventDate']
0 26-12-2016
1 23-12-2016
2 16-12-2016
3 15-12-2016
4 11-12-2016
5 10-12-2016
6 07-12-2016
现在我尝试拆分日期,并使用以下命令将年份的最后四个值提取到另一个系列中:
trial=df["EventDate"].str.split("-",2,expand=True)
现在使用第三个索引值,我可以获得整个值:
df.year=trial[2]
立即检查年份列的数据类型:
type(df.year)
Out[80]: pandas.core.series.Series
是的,Pandas系列通过试用[2]代码转移到df.year
print(trial[2])
0 2016
1 2016
2 2016
3 2016
4 2016
现在我正在尝试Groupby the Year列,这就是我收到错误的地方:
yearwise=df.groupby('year')
Traceback (most recent call last):
File "<ipython-input-81-cf39b80933c4>", line 1, in <module>
yearwise=df.groupby('year')
File "C:\WINPYTH\python-3.5.4.amd64\lib\site-
packages\pandas\core\generic.py", line 4416, in groupby
**kwargs)
File "C:\WINPYTH\python-3.5.4.amd64\lib\site-
packages\pandas\core\groupby.py", line 1699, in groupby
return klass(obj, by, **kwds)
File "C:\WINPYTH\python-3.5.4.amd64\lib\site-
packages\pandas\core\groupby.py", line 392, in __init__
mutated=self.mutated)
File "C:\WINPYTH\python-3.5.4.amd64\lib\site-
packages\pandas\core\groupby.py", line 2690, in _get_grouper
raise KeyError(gpr)
KeyError: 'year'
是否可以帮助解决此KeyError并获取Year列的Groupby值?
很早就感谢你的回答。
答案 0 :(得分:2)
这里的根本误解是你认为在做什么
df.year = ...
在year
中创建一个名为df
的列,但不为真!观察:
print(df)
Col1
0 26-12-2016
1 23-12-2016
2 16-12-2016
3 15-12-2016
4 11-12-2016
5 10-12-2016
6 07-12-2016
df.year = df.Col1.str.split('-', 2, expand=True)[2]
print(type(df.year))
pandas.core.series.Series
print(df) # where's 'year'??
Col1
0 26-12-2016
1 23-12-2016
2 16-12-2016
3 15-12-2016
4 11-12-2016
5 10-12-2016
6 07-12-2016
那么,df.year
是什么?它是df
的属性,与列不同。在python中,您可以使用dot
表示法分配属性,因此这可以在不抛出错误的情况下工作。您可以打印出df.__dict__
print(df.__dict__)
{ ...
'year': 0 2016
1 2016
2 2016
3 2016
4 2016
5 2016
6 2016
Name: 2, dtype: object}
如果要实际分配给列,则需要使用[...]
索引语法,如下所示:
df['year'] = df.Col1.str.split('-', 2, expand=True)[2]
print(df)
Col1 year
0 26-12-2016 2016
1 23-12-2016 2016
2 16-12-2016 2016
3 15-12-2016 2016
4 11-12-2016 2016
5 10-12-2016 2016
6 07-12-2016 2016