不可用的类型:' dict'在应用熊猫功能的同时?

时间:2017-01-02 22:52:42

标签: python python-3.x pandas python-requests

我正在使用请求库将api包裹成一个函数:

import pandas as pd
import requests, json

def foo(text):
    payload = {'key': '00ac1ef82687c7533d54be2e9', 'of': 'json', \
               'nko': text, \
               'woei': 'm', \
               'nvn': 'es'}

    r = requests.get('http://api.example.com/foo', params=payload)
    data = json.loads(r.text)
    return data

然后,我想将上述函数应用于以下数据帧:

DF:

    colA
0   lore lipsum dolor done
1   lore lipsum
2   done lore
3   dolor lone lipsum

因此,我尝试了以下内容:

df['new_col'] = df['colA'].apply(foo)
df

但是,我得到以下例外:

  

/usr/local/lib/python3.5/site-packages/pandas/core/series.py in   apply(self,func,convert_dtype,args,** kwds)2287 2288
  if is_extension_type(self.dtype):    - > 2289 mapped = self._values.map(f)2290 else:2291 values = self.asobject

     

/usr/local/lib/python3.5/site-packages/pandas/core/categorical.py in   地图(自我,映射器)       950返回self.from_codes(self._codes.copy(),       951类= new_categories,    - > 952 ordered = self.ordered)       953除了ValueError:       954 return np.take(new_categories,self._codes)

     

/usr/local/lib/python3.5/site-packages/pandas/core/categorical.py in   from_codes(cls,代码,类别,有序,名称)       466"代码需要可以转换为整数数组")       467    - > 468个类别= cls._validate_categories(类别)       469       470如果len(代码)和(codes.max()> = len(类别)或codes.min()< -1):

     

/usr/local/lib/python3.5/site-packages/pandas/core/categorical.py in   _validate_categories(cls,categories,fastpath)       571个#类别必须是唯一的       572    - > 573如果不是categories.is_unique:       574引发ValueError('分类类别必须是唯一的')       575

     pandas.lib.cache_readonly中的pandas / src / properties.pyx。获取   (熊猫/ lib.c:43685)()

     

/usr/local/lib/python3.5/site-packages/pandas/indexes/base.py in   is_unique(self)1068 def is_unique(self):1069"""   如果索引具有唯一值,则返回"""    - > 1070返回self._engine.is_unique 1071 1072 @property

     pandas.index.IndexEngine.is_unique中的

pandas / index.pyx。获取   (熊猫/ index.c:4883)()

     

pandas.index.IndexEngine.initialize中的pandas / index.pyx   (熊猫/ index.c:5828)()

     

pandas / src / hashtable_class_helper.pxi in   pandas.hashtable.PyObjectHashTable.map_locations   (熊猫/ hashtable.c:13788)()

     

TypeError:不可用类型:' dict'

因此,我的问题是如何正确地将foo函数应用于df列?

1 个答案:

答案 0 :(得分:1)

调用df['colA'].apply(foo)类似于:foo(df['colA'])(其中df['colA'] - 是pandas.Series),因此您的函数应该能够接受pandas.Series作为参数 - 如果不是这种情况且foo()只能接受标量参数,那么我们必须为每一行调用foo()

df[['colA']].apply(foo, axis=1)

注意:df[['colA']] - 是一个DataFrame,因为Series.apply()函数没有axis参数