web-dev-qa-db-ja.com

Python 3-Zipは、pandasデータフレームのイテレータです

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 gotcha私がそれを別の方法で行う必要がありますか?

20
sayth

次の行を変更する必要があります。

BabyDataSet = Zip(names,births)

に:

BabyDataSet = list(Zip(names,births))

これは、Zipがpython 3でイテレータを返すため、エラーメッセージです。詳細については、 http://www.diveintopython3.net/ porting-code-to-python-3-with-2to3.html#Zip および https://docs.python.org/3/library/functions.html#Zip

30
EdChum