web-dev-qa-db-fra.com

Python 3 - Zip est un itérateur dans un pandas dataframe

Je suis le tutoriels Pandas

Les tutoriels sont écrits en utilisant python 2.7 et je les fais en python 3.4

Voici mes détails de version.

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

Je crée le Zip selon le tutoriel

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)

Mais après la création, la première erreur montre que je ne peux pas voir le contenu du Zip.

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

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

Ensuite, lorsque je vais créer la trame de données, j'obtiens cette erreur d'itérateur.

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]:

Est-ce un python 3 gotcha où je dois le faire différemment? Ou autre?

20
sayth

Vous devez changer cette ligne:

BabyDataSet = Zip(names,births)

à:

BabyDataSet = list(Zip(names,births))

C'est parce que Zip retourne maintenant un itérateur dans python 3, d'où votre message d'erreur. Pour plus de détails, voir: http://www.diveintopython3.net/ porting-code-to-python-3-with-2to3.html # Zip et https://docs.python.org/3/library/functions.html#Zip

30
EdChum