- 此问题在此处已有答案**:
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.
有办法补救吗?
1条答案
按热度按时间jq6vz3qz1#
这个问题是Python 2和Python 3的
map
函数返回的不同之处。在Python 2中,map
返回一个列表,而在Python 3中,它返回一个生成器。生成器没有长度(因为它们在求值时产生结果,即不将所有值存储在内存中)。你可以使用list(generator_object)
或列表解析将生成器转换为列表。这应该行得通。