Perché pandas.DataFrame.apply stampa fuori spazzatura?

voti
10

Considerate questo semplice dataframe:

   a  b
0  1  2
1  2  3

Eseguo una .applyin quanto tale:

In [4]: df.apply(lambda x: [x.values])
Out[4]: 
a    [[140279910807944, 140279910807920]]
b    [[140279910807944, 140279910807920]]
dtype: object

In [5]: df.apply(lambda x: [x.values])
Out[5]: 
a    [[37, 37]]
b    [[37, 37]]
dtype: object

In [6]: df.apply(lambda x: [x.values])
Out[6]: 
a    [[11, 11]]
b    [[11, 11]]
dtype: object

Perché i panda stampando spazzatura ogni volta?

Ho verificato questo accade in v0.20.

Edit: Alla ricerca di una risposta, non è una soluzione.

È pubblicato 10/09/2017 alle 03:39
dall'utente
In altre lingue...                            


3 risposte

voti
6

Non ho una risposta ... solo un lavoro in giro

f = lambda x: x.values.reshape(1, -1).tolist()

df.apply(f)

a    [[1, 2]]
b    [[2, 3]]
dtype: object

Ho rintracciato verso il basso per pd.lib.reduce

pd.lib.reduce(df.values, lambda x: [list(x)])

array([list([[1, 2]]), list([[2, 3]]), list([['a', 'b']])], dtype=object)

Contro

pd.lib.reduce(df.values, lambda x: [x])

array([list([array([None, None], dtype=object)]),
       list([array([None, None], dtype=object)]),
       list([array([None, None], dtype=object)])], dtype=object)
Risposto il 10/09/2017 a 03:53
fonte dall'utente

voti
8

Sembra bug, quindi è stato aperto Problema 17487 .

Per me lavorare aggiungere tolist:

print (df.apply(lambda x: [x.values.tolist()]))
a    [[1, 2]]
b    [[2, 3]]
dtype: object

print (df.apply(lambda x: [list(x.values)]))
a    [[1, 2]]
b    [[2, 3]]
dtype: object
Risposto il 10/09/2017 a 03:56
fonte dall'utente

voti
3

Un altro lavoro intorno:

df.apply(lambda x: [list(x)])
Risposto il 10/09/2017 a 03:56
fonte dall'utente

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more