2016-04-11 10 views
-1

Meine Frage an die folgenden Post/Frage ähnelt: Find the length of the longest string in a Pandas DataFrame columnLänge von max Zeichenfolge in Pandas Dataframe

aber ich frage mich, wie über einen Datenrahmen mit mehreren Spalten die längste Zeichenfolge zu finden. Die Lösung für den oben genannten Beitrag ist für eine einzelne Spalte festgelegt. Wie würde ich alle Spalten in einem Datenrahmen auswerten und die längste Länge finden? Beachten Sie, dass das längste Element möglicherweise keine Zeichenfolge ist. Es kann eine lange Dezimalzahl sein.

+0

wird nicht 'df.astype (str) .apply (lambda x: x.str.len()). Max(). Max()' Arbeit? – EdChum

+0

Ich weiß es nicht, oder? :) – Gichin

+0

Ich erwarte es, ich habe gerade auf einem df Mixe Typen versucht und es hat funktioniert – EdChum

Antwort

0

Sie können, dass innerhalb von Spalten für maximal durch die Suche erreichen und dann maximal über das Ergebnis der Suche:

np.random.seed(123) 
df = pd.DataFrame({ 
     'c1': ['abc','a','ghjhkkhgjgj'], 
     'c2': np.random.randint(1,1e9,3) 
    }) 
df 
     c1 c2 
0 abc 843828735 
1 a 914636142 
2 ghjhkkhgjgj 155217279 

max(df.astype('str').applymap(lambda x: len(x)).max()) 
11 

Falls Sie die Zeichenfolge wollen selbst:

mask = df.astype('str').applymap(lambda x: len(x)) >= max(df.astype('str').applymap(lambda x: len(x)).max()) 
df[mask] 

    c1 c2 
0 NaN NaN 
1 NaN NaN 
2 ghjhkkhgjgj NaN 

Timing-Vergleich vs EdChum Vorschlag

%timeit max(df.astype('str').applymap(lambda x: len(x)).max()) 
100 loops, best of 3: 2.11 ms per loop 

%timeit df.astype(str).apply(lambda x: x.str.len()).max().max() 
100 loops, best of 3: 2.71 ms per loop 

(Bitte beachten Sie, das ist immer noch ein kleines df)

+1

Ich erwarte 'df.astype (str) .apply (lambda x: x.str.len()). Max(). Max() 'um für große dfs schneller zu sein, da dies über die Spalten iteriert, während' applymap 'iteriert über jedes Element – EdChum

+2

Die andere Sache, die hier zu betrachten ist, ist htat 'str.len' ist' NaN' tolerant – EdChum

+0

@EdChum, sobald Sie 'df.astype (str)' tun, gibt es keine 'NaNs' in df –