Python 3 - Zip 是 Pandas 数据帧中的迭代器
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/26121009/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Python 3 - Zip is an iterator in a pandas dataframe
提问by sayth
I am following the Pandas tutorials
我正在关注Pandas 教程
The tutorials are written using python 2.7 and I am doing them in python 3.4
这些教程是使用 python 2.7 编写的,我在 python 3.4 中编写它们
Here is my version details.
这是我的版本详细信息。
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
I create the zip as per the tutorial
我按照教程创建了 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)
But after creation the first error shows that I cannot see the contents of the zip.
但是创建后第一个错误显示我看不到 zip 的内容。
In [17]: BabyDataSet
Out[17]: <zip at 0x4f28848>
In [18]: print(BabyDataSet)
<zip object at 0x0000000004F28848>
Then when I go to create the dataframe I get this iterator error.
然后当我去创建数据帧时,我得到了这个迭代器错误。
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]:
Is this a python 3 gotcha where I need to do it differently? Or other?
这是一个python 3 gotcha,我需要以不同的方式做吗?或其他?
采纳答案by EdChum
You need to change this line:
您需要更改此行:
BabyDataSet = zip(names,births)
to:
到:
BabyDataSet = list(zip(names,births))
This is because zipnow returns an iterator in python 3, hence your error message. For more details see: http://www.diveintopython3.net/porting-code-to-python-3-with-2to3.html#zipand https://docs.python.org/3/library/functions.html#zip
这是因为zip现在在 python 3 中返回一个迭代器,因此您的错误消息。有关更多详细信息,请参阅:http: //www.diveintopython3.net/porting-code-to-python-3-with-2to3.html#zip和https://docs.python.org/3/library/functions.html #压缩

