Dataframe操作时出现 KeyError: '列名xxx'

python确实很用来很爽很苏服,代码不多

各种库出于易用目的,做了很多默认设置,但要是不认真看API,那就会掉到坑里了。

df1.groupby([‘Dn‘,‘UserLabel‘,‘BeginTime‘]).first()

df1[‘city‘]=df1[‘UserLabel‘].str.slice(0,2)

出现

df1[‘UserLabel‘]
File "D:\script\Python279\lib\site-packages\pandas\core\frame.py", line 1787, in __getitem__
return self._getitem_column(key)
File "D:\script\Python279\lib\site-packages\pandas\core\frame.py", line 1794, in _getitem_column
return self._get_item_cache(key)
File "D:\script\Python279\lib\site-packages\pandas\core\generic.py", line 1079, in _get_item_cache
values = self._data.get(item)
File "D:\script\Python279\lib\site-packages\pandas\core\internals.py", line 2843, in get
loc = self.items.get_loc(item)
File "D:\script\Python279\lib\site-packages\pandas\core\index.py", line 1437, in get_loc
return self._engine.get_loc(_values_from_object(key))
File "pandas\index.pyx", line 134, in pandas.index.IndexEngine.get_loc (pandas\index.c:3824)
File "pandas\index.pyx", line 154, in pandas.index.IndexEngine.get_loc (pandas\index.c:3704)
File "pandas\hashtable.pyx", line 697, in pandas.hashtable.PyObjectHashTable.get_item (pandas\hashtable.c:12349)
File "pandas\hashtable.pyx", line 705, in pandas.hashtable.PyObjectHashTable.get_item (pandas\hashtable.c:12300)
KeyError: ‘UserLabel‘

因为中间过程将df1.to_pickle成文件,一直以为是pickle问题,以为是Userlabel是Unicode导致的问题,最后细看pandas的api文档才发现这一切是因groupby()的默认参数所致。

An obvious one is aggregation via the aggregate or equivalently agg method:

In [40]: grouped = df.groupby(‘A‘)

In [41]: grouped.aggregate(np.sum)
Out[41]:
            C         D
A
bar  0.443469  0.920834
foo  2.529056 -1.724719

In [42]: grouped = df.groupby([‘A‘, ‘B‘])

In [43]: grouped.aggregate(np.sum)
Out[43]:
                  C         D
A   B
bar one   -0.042379 -0.089329
    three -0.009920 -0.945867
    two    0.495767  1.956030
foo one   -0.556905 -1.113758
    three  1.548106 -0.016692
    two    1.537855 -0.594269

As you can see, the result of the aggregation will have the group names as the new index along the grouped axis. In the case of multiple keys, the result is a MultiIndex by default, though this can be changed by using the as_index option:

In [44]: grouped = df.groupby([‘A‘, ‘B‘], as_index=False)

In [45]: grouped.aggregate(np.sum)
Out[45]:
     A      B         C         D
0  bar    one -0.042379 -0.089329
1  bar  three -0.009920 -0.945867
2  bar    two  0.495767  1.956030
3  foo    one -0.556905 -1.113758
4  foo  three  1.548106 -0.016692
5  foo    two  1.537855 -0.594269

In [46]: df.groupby(‘A‘, as_index=False).sum()
Out[46]:
     A         C         D
0  bar  0.443469  0.920834
1  foo  2.529056 -1.724719

Note that you could use the reset_index DataFrame function to achieve the same result as the column names are stored in the resulting MultiIndex:

as_index默认为true,由于groupby后,‘Dn‘,‘UserLabel‘,‘BeginTime‘都由column变成了index,多个index(MultiIndex),index无法用df1[列名]来表示所以需要在groupby时加上as_index=False参数,或用reindex()
 

Dataframe操作时出现 KeyError: '列名xxx'

时间: 2024-10-13 21:10:57

Dataframe操作时出现 KeyError: '列名xxx'的相关文章

Spark-SQL之DataFrame操作大全

Spark SQL中的DataFrame类似于一张关系型数据表.在关系型数据库中对单表或进行的查询操作,在DataFrame中都可以通过调用其API接口来实现.可以参考,Scala提供的DataFrame API. 本文中的代码基于Spark-1.6.2的文档实现. 一.DataFrame对象的生成 Spark-SQL可以以其他RDD对象.parquet文件.json文件.Hive表,以及通过JDBC连接到其他关系型数据库作为数据源来生成DataFrame对象.本文将以MySQL数据库为数据源,

Spark-SQL之DataFrame操作

dycopy :http://blog.csdn.net/dabokele/article/details/52802150 Spark SQL中的DataFrame类似于一张关系型数据表.在关系型数据库中对单表或进行的查询操作,在DataFrame中都可以通过调用其API接口来实现.可以参考,Scala提供的DataFrame API. 本文中的代码基于Spark-1.6.2的文档实现. 一.DataFrame对象的生成 Spark-SQL可以以其他RDD对象.parquet文件.json文件

SparkSql之DataFrame操作

Spark SQL中的DataFrame类似于一张关系型数据表.在关系型数据库中对单表或进行的查询操作,在DataFrame中都可以通过调用其API接口来实现.可以参考,Scala提供的DataFrame API. 本文中的代码基于Spark-1.6.2的文档实现. 一.DataFrame对象的生成 Spark-SQL可以以其他RDD对象.parquet文件.json文件.Hive表,以及通过JDBC连接到其他关系型数据库作为数据源来生成DataFrame对象.本文将以MySQL数据库为数据源,

关于有默认值的字段在用EF做插入操作时的思考(续)

原文:关于有默认值的字段在用EF做插入操作时的思考(续) 问题描述 今天下午(看现在这时间,应该是昨天下午了哈),园友 choon 写了这样一篇博文<关于有默认值的字段在用EF做插入操作时的思考>. 博文内容主要记录的是 choon 使用 EF 做数据插入与更新时,字段默认值的问题,这个问题我们平常应该都会遇到,但是,最后博文内容包括评论,并没人能给出一个准确的答案,真是很可惜(知识点的博文都是一侃一大堆,而这些实际项目遇到的问题却回答不上来,又有什么用呢,哎...).详细内容请查看上面的博文

无法执行该操作,因为链接服务器 &quot;XXX&quot; 的 OLE DB 访问接口 &quot;SQLNCLI10&quot; 无法启动分布式事务。

在存储过程中使用事务,并且使用链接服务器时,报以下错误:   无法执行该操作,因为链接服务器 "XXX" 的 OLE DB 访问接口 "SQLNCLI10" 无法启动分布式事务. 链接服务器"XXX"的 OLE DB 访问接口 "SQLNCLI10" 返回了消息 "没有活动事务. 解决方法: 1.修改host设置,在C:\Windows\System32\drivers\etc下,在两台服务器分别添加对方计算机的IP

运维规范:执行写入操作时,一定不要开两个分别连入不同主机的securCRT窗口

运维规范:执行写入操作时,一定不要开两个分别连入不同主机的securCRT窗口. 本文说的是写入操作,若是查询操作,能只打开一个主机的securCRT窗口,就不要打开两个主机的securCRT窗口. 由于ogg复制环境中需要单表数据重新同步的关系,我经常在生产环境的ogg源头库中expdp,在ogg目的端库中impdp 当我在生产环境的ogg源头库中expdp完成并scp dmp 文件到目的端os之后,我会立即exit退出ogg源头的securCRT窗口. 原因是我怕impdp之前的drop t

关于有默认值的字段在用EF做插入操作时的思考

今天在用EF做插入操作的时候发现数据库中一个datetime类型的字段(CreateDate)的值居然全部为null.于是赶紧看表结构发现CreateDate字段居然是允许为空的. 虽然为空,但是设置了默认值getdate(),按说不应该为null的.于是开始测试. 字段允许Null值的情况 Users表结构如下: 假如一个字段有了默认值,并且又允许为Null,在做插入操作时会发生什么? 如上图中的表结构,CreateDate是允许为null的,而又有默认值getdate().这样在用传统SQL

使用hql查询时的异常:Xxx is not mapped[from Xxx where ...]

今天项目中使用hql查询时,出现    QingAoCenterInfo is not mapped[from QingAoCenterInfo where...] 显然是Hibernate映射关系出现了问题. 出现这种异常首先要查看查询语句中是否使用了数据库表中的表名,而不是实体类. 查看我的代码: centerList = manager.find("from QingAoCenterInfo center where center.type = ? and center.centerNam

ios ASIHttpRequest库进行DELETE操作时delete带有参数表单的使用方法

1,普通的DELETE只需加上下述一句code: [request setRequestMethod:@"DELETE"]; 2,附带有参数表单的情况(一次删除请求): ASIFormDataRequest *request; NSURL *baseURL = [NSURL URLWithString:@"http://www.baidu.com/xx/"]; request = [ASIFormDataRequest requestWithURL:baseURL]