在Python3中创建Pandas数据框时出现问题[重复]

soat7uwm  于 2023-01-07  发布在  Python
关注(0)|答案(1)|浏览(213)
    • 此问题在此处已有答案**:

Why can't I iterate twice over the same iterator? How can I "reset" the iterator or reuse the data?(5个答案)
三年前关闭了。
我是Python新手,在创建Pandas数据框时遇到了麻烦。

dataDict = {}
dataDict['grant_id'] = grant_ids
dataDict['patent_title'] = patent_title
dataDict['kind'] = kinds

df=pd.DataFrame(dataDict)

上面的代码在python2中可以工作,但是当我切换到python3时,我得到了错误消息:

TypeError Traceback (most recent call last)
<ipython-input-6-3a9900bc5bca> in <module>()
      9 #dataDict['abstract'] = abstractResult
     10 
---> 11 df=pd.DataFrame(dataDict)
     12 
     13 df.head()

3 frames
/usr/local/lib/python3.6/dist-packages/pandas/core/internals/construction.py in extract_index(data)
    303             elif is_list_like(val) and getattr(val, 'ndim', 1) == 1:
    304                 have_raw_arrays = True
--> 305                 raw_lengths.append(len(val))
    306 
    307         if not indexes and not raw_lengths:

TypeError: object of type 'map' has no len()

grant_ids is a list of integers.

有办法补救吗?

jq6vz3qz

jq6vz3qz1#

这个问题是Python 2和Python 3的map函数返回的不同之处。在Python 2中,map返回一个列表,而在Python 3中,它返回一个生成器。生成器没有长度(因为它们在求值时产生结果,即不将所有值存储在内存中)。你可以使用list(generator_object)或列表解析将生成器转换为列表。

dataDict = {}
dataDict['grant_id'] = [id_ for id_ in grant_ids]
dataDict['patent_title'] = [title for title in patent_title]
dataDict['kind'] = [kind for kind in kinds]

df=pd.DataFrame(dataDict)

这应该行得通。

相关问题