2017-02-14 4 views
6

Iwie man den pandas datenframe säulenweise schneidet?

In [67]: a 
Out[67]: 

    0 1 2 
0 1 2 3 
1 4 5 6 

haben, wenn ich

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

Ich habe

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

Ist das erwartet? Ich hatte erwartet, wie etwas zu bekommen:

Out[72]: 

    0 1 2 
0 1.5 2.5 3.5 
1 4.0 5.0 6.0 

Antwort

6

Statt eines numpy Array können Sie eine Serie verwenden, so dass die Etiketten ausgerichtet sind:

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

niedriger: float oder array_like, default Keine

Nach API reference, sollen Sie gleiche geformte Array verwenden.

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

die Dimension meiner df ist groß - ist es ein Trick eine andere df/np Erstellung zu vermeiden .array mit solcher Dimension? – bill

+0

@bill OK, dann schlage ich Ihnen vor, Listenverständnis zu versuchen. Mein Code ein wenig aktualisiert. Aber mir fällt (vorerst) nichts ein, ein weiteres np.array zu vermeiden. – su79eu7k

Verwandte Themen