2017-05-03 6 views
1

Ich habe folgendes numpy Array:Wie kann ich% zu jedem Wert im Array numpy hinzufügen?

arr= [[  0.          0.1046225518   0.          0.8953774482   0.        ]] 

Im Moment habe ich

values= str(np.around([arr*100],decimals=2)) 

Rückkehr:

[[  0.          10.46   0.          89.53  0.        ]] 

Wenn ich + % auf Werte, es gibt

[[  0.          10.46   0.          89.53  0.        ]]% 

Die gewünschte Ausgabe ist:

[[  0.          10.46%   0.          89.53%  0.        ]] 
+0

Was sollte Ihre Ausgabe sein? Eine Reihe von Strings oder nur eine Zeichenfolge? – Feodoran

+0

numpy Array von Strings, weil nach Dataframe wenden möchten – ge00rge

+0

bezogen: https://StackOverflow.com/Questions/35661968/add-a-Percent-Sign-To-A-Dataframe-column-in-Python – EdChum

Antwort

3

Da Sie in einem Kommentar erwähnt würden Sie diese gerne an einen Datenrahmen konvertieren (ich nehme an, Sie einen Pandas Datenrahmen bedeuten) ...

import numpy as np 
import pandas as pd 

# Reproduce your numpy array 
arr= np.array([[ 0.0, 0.1046225518, 0.0, 0.8953774482, 0.0]]) 

# Convert to 1-Column DataFrame of % Strings 
# (use pd.Series() instead if you'd prefer this as a Pandas Series) 
as_strings = pd.DataFrame(["{0:.2f}%".format(val * 100) for val in arr[0]]) 

# Assign column name 
as_strings.columns = ['Numbers as Strings'] 

print(as_strings) 

    Numbers as Strings 
0    0.00% 
1    10.46% 
2    0.00% 
3    89.54% 
4    0.00% 

Dank zu this SO answer für die meisten der Schlüssellinie des Codes.

+0

Great max , danke für Ihre Hilfe!! – ge00rge

1

Wenn Sie mit Pandas:

(pd.Series([ 0.0, 0.1046225518, 0.0, 0.8953774482, 0.0]) * 10).round(2).astype(str) + " %" 

Resultierende in

0  0.0 % 
1 1.05 % 
2  0.0 % 
3 8.95 % 
4  0.0 % 
dtype: object 
0

Auch Lösung bei Bedarf 0 nur:

where + mul + round + astype

arr = np.array([[0.,0.1046225518,0., 0.8953774482, 0.]]) 

#DataFrame by constructor 
df = pd.DataFrame(arr.reshape(-1, len(arr)), columns=['A']) 

#convert 0 to string also for avoid mixed types - floats and strings 
df['B'] = df['A'].astype(str).where(df['A'] == 0, 
            df['A'].mul(100).round(2).astype(str).add('%')) 
print (df) 
      A  B 
0 0.000000  0.0 
1 0.104623 10.46% 
2 0.000000  0.0 
3 0.895377 89.54% 
4 0.000000  0.0 
Verwandte Themen