2017-02-14 20 views
6

Mamjak klipować ramkę danych pandy zgodnie z kolumną?

In [67]: a 
Out[67]: 

    0 1 2 
0 1 2 3 
1 4 5 6 

kiedy biegnę

In [69]: a.clip(lower=[1.5,2.5,3.5],axis=1) 

mam

ValueError: other must be the same shape as self when an ndarray 

Czy to prawidłowo? Spodziewałem się uzyskać coś takiego:

Out[72]: 

    0 1 2 
0 1.5 2.5 3.5 
1 4.0 5.0 6.0 

Odpowiedz

6

Zamiast numpy tablicy, można użyć serii więc etykiety są wyrównane:

df 
Out: 
    A B 
0 1 4 
1 2 5 
2 3 6 

df.clip(lower=pd.Series({'A': 2.5, 'B': 4.5}), axis=1) 
Out: 
    A B 
0 2.5 4.5 
1 2.5 5.0 
2 3.0 6.0 
0

dolna: pływak lub array_like, domyślnie None

Według API reference, jesteś powinien używać tego samego kształcie tablicę.

import numpy as np 
import pandas as pd 

... 

print df.shape 

(2, 3) 

print df.clip(lower=(df.clip(lower=(np.array([[n+1.5 for n in range(df.shape[1])] for _ in range(df.shape[0])])), axis=1)) 

    0 1 2 
0 1.5 2.5 3.5 
1 4.0 5.0 6.0 
+0

wymiar mojego df jest duża - jest jakiś podstęp, aby uniknąć tworzenia kolejnego df/NP .array z takim wymiarem? – bill

+0

@bill OK, a następnie proponuję wypróbować zrozumienie listy. Zaktualizowałem trochę mój kod. Ale nic nie przychodzi mi do głowy (na razie) w odniesieniu do uniknięcia kolejnego np.array. – su79eu7k

Powiązane problemy