2017-02-27 1 views
3

Ich habe eine Art Rätsel:Mindestens zwei uint64 mit fehlenden Werten ohne float64 Umwandlung

import pandas as pd 

a = pd.Series([5, 3, 5], index=[1, 3, 4]) # int64 
b = pd.Series([1, 9, 4], index=[1, 2, 4]) # int64 

m = pd.DataFrame([a, b]).min()    # float64 

ich genau wissen, warum es passiert: sobald ich a und b in dem gleichen Datenrahmen setzen, es fehlt Werte, und fehlende Werte können nicht in int64 dargestellt werden, so dass der dtype auf float64 gestoßen wird. Aber ich würde gerne das Minimum ohne die Konvertierung bekommen. Gibt es eine Möglichkeit, die fehlenden Werte aus der anderen Spalte vorzufüllen, oder eine andere Technik, die es mir erlaubt, das Minimum der beiden Reihen zu nehmen, ohne mit NaN umgehen zu müssen?

Antwort

3

ich glaube, Sie reindex von union sowohl indexes, Parameter fill_value ersetzen NaN zu skalaren verwenden können. Sie müssen min, so eine mögliche Lösung ist einige große int wie 10000 oder max von Series:

idx = b.index.union(a.index) 

print (pd.DataFrame([a.reindex(idx, fill_value=a.max()), 
        b.reindex(idx, fill_value=b.max())])) 

    1 2 3 4 
0 5 5 3 5 
1 1 9 9 4 

m = pd.DataFrame([a.reindex(idx, fill_value=a.max()), 
        b.reindex(idx, fill_value=b.max())]).min() 
print (m) 
1 1 
2 5 
3 3 
4 4 
dtype: int64 
+0

Ja, das sieht genauso aus wie das, was ich wollte. Wahrscheinlich vorzeitige Optimierung; aber ich lerne immer noch in Pandas zu denken. – Amadan

Verwandte Themen