【问题标题】:Python 3 - Zip is an iterator in a pandas dataframePython 3 - Zip 是 pandas 数据框中的迭代器
【发布时间】:2014-11-25 02:12:34
【问题描述】:

我在关注Pandas tutorials

教程是使用 python 2.7 编写的,我是在 python 3.4 中编写的

这是我的版本详情。

In [11]: print('Python version ' + sys.version)
Python version 3.4.1 |Anaconda 2.0.1 (64-bit)| (default, Jun 11 2014, 17:27:11)
[MSC v.1600 64 bit (AMD64)]

In [12]: print('Pandas version ' + pd.__version__)
Pandas version 0.14.1

我按照教程创建 zip

In [13]: names = ['Bob','Jessica','Mary','John','Mel']

In [14]: births = [968, 155, 77, 578, 973]

In [15]: zip?
Type:            type
String form:     <class 'zip'>
Namespace:       Python builtin
Init definition: zip(self, *args, **kwargs)
Docstring:
zip(iter1 [,iter2 [...]]) --> zip object

Return a zip object whose .__next__() method returns a tuple where
the i-th element comes from the i-th iterable argument.  The .__next__()
method continues until the shortest iterable in the argument sequence
is exhausted and then it raises StopIteration.

In [16]: BabyDataSet = zip(names,births)

但创建后第一个错误显示我看不到 zip 的内容。

In [17]: BabyDataSet
Out[17]: <zip at 0x4f28848>

In [18]: print(BabyDataSet)
<zip object at 0x0000000004F28848>

然后当我去创建数据框时,我得到了这个迭代器错误。

In [21]: df = pd.DataFrame(data = BabyDataSet, columns=['Names', 'Births'])
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-21-636a49c94b6e> in <module>()
----> 1 df = pd.DataFrame(data = BabyDataSet, columns=['Names', 'Births'])

c:\Users\Sayth\Anaconda3\lib\site-packages\pandas\core\frame.py in __init__(self
, data, index, columns, dtype, copy)
    255                                          copy=copy)
    256         elif isinstance(data, collections.Iterator):
--> 257             raise TypeError("data argument can't be an iterator")
    258         else:
    259             try:

TypeError: data argument can't be an iterator

In [22]:

这是 python 3 的陷阱,我需要以不同的方式做吗?还是其他?

【问题讨论】:

标签: python python-3.x pandas


【解决方案1】:

你需要改变这一行:

BabyDataSet = zip(names,births)

到:

BabyDataSet = list(zip(names,births))

这是因为 zip 现在在 python 3 中返回一个迭代器,因此您的错误消息。更多详情见:http://www.diveintopython3.net/porting-code-to-python-3-with-2to3.html#ziphttps://docs.python.org/3/library/functions.html#zip

【讨论】:

  • 感谢实际上必须将其写为 BabyDataSet = list(zip(names,births) 。否则数据框不会加载需要列表的字典。
  • @sayth 是的,我没有注意到您的 DataFrame 构造函数传递了 columns 参数。会更新。
猜你喜欢
  • 1970-01-01
  • 2019-01-14
  • 1970-01-01
  • 2016-10-27
  • 2018-02-04
  • 2018-11-01
  • 2023-01-14
  • 2017-01-04
  • 2014-04-04
相关资源
最近更新 更多