2017-07-02 4 views
3

ich PyUpset Paket verwenden ist versucht und es Testdaten in pickeln hat die herewie können wir Datenformat wie diese Gurke

gefunden werden kann kann ich den folgenden Code lief Inhalt und das Format der Daten anzuzeigen

from pickle import load 
with open('./test_data_dict.pckl', 'rb') as f: 
    data_dict = load(f) 
data_dict 

, die Daten zeigten, von folgendem Format zu sein, es ist nur ein Beispiel, wie es aussieht,

[495 rows X 4 columns], 
    'adventure':   title rating_avg \ 
     0    20,000 Leagues Under the Sea (1954) 3.702609  
     1     7th Voyage of Sinbad, The (1958)  3.616279 

      rating_std views 
     0  0.869685 575 
     1  0.931531 258 

    [281 rows x 4 columns], 
    'romance':   title rating_avg \ 
     0    'Til There Was You (1997) 2.402609  
     1     1-900 (1994)    2.411279 

      rating_std views 
     0  0.669685 575 
     1  0.981310 245 

ich meine csv Daten versucht haben, zu formatieren Auf diese Weise und die am nächsten war ich in der Lage wurde mit Pandas wie diese im folgende Format

CSV-Datei, um etwas zu bekommen,

Type_A, Type_B, Type_C 
x1,x2,x3 
y1,y2,y3 

verwendet Pandas in Datenrahmen importieren und nach dem Hinzufügen eines Index concat zusammen

import pandas as pd 
df=pd.read_csv(csv_file) 
d1=df.Type_A.tolist() 
d2=df.Type_B.tolist() 
d3=df.Type_C.tolist() 

dann Index verwendet aufzählen()

d1_df=list(enumerate(d1, 1)) 
d2_df=list(enumerate(d2, 1)) 
d3_df=list(enumerate(d3, 1)) 
d1_df # this gives me [(1, 'x1'), (2, 'y1')] 

N hinzuzufügen ow nächstes habe ich Lables Id und Wert

labels = ['Id','Value'] 
d1_df = pd.DataFrame.from_records(d1_df, columns=labels) 
d2_df = pd.DataFrame.from_records(d2_df, columns=labels) 
d3_df = pd.DataFrame.from_records(d3_df, columns=labels) 


d1_df # this gives me Id Value 
     #   0 1 x1 
     #   1 2 y1 

dann kombiniert alle drei in einem Datenrahmen zu Datenrahmen und Type_A, Type_B und Type_C

child_df = [d1_df, d2_df, d3_df] 
labels2 = ['Type_A','Type_B','Type_C'] 

parent_df = pd.concat(child_df, keys=['Type_A', 'Type_B', 'Type_C']) 

parent_df # out below 


#   Id Value 
#Type_A 0 1 x1 
#  1 2 y1 
#Type_B 0 1 x2 
#  1 2 y2 
#Type_C 0 1 x3 
#  1 2 y3 

Das ist neu zu definieren, wo ich geschlagen bin, ich glaube, ich bin mit falscher Ansatz und es sollte einfacher sein, Daten in dem Format zu erhalten, in dem PyUpset verwendet wurde.

Antwort

2

Ich denke, Sie müssen die Tabelle transponieren, so dass es im "langen" Format ist. Sobald Sie das tun, können Sie die groupby-Methode in Pandas verwenden, um das richtige Wörterbuch für pyupset zu erstellen.

import pandas as pd 
try: 
    # for Python 2.x 
    from StringIO import StringIO 
except ImportError: 
    # for Python 3.x 
    from io import StringIO 

test_string = StringIO("""Type_A,Type_B,Type_C 
x1,x2,x3 
y1,y2,y3""") 

df = pd.read_csv(test_string) 
df = pd.melt(df, var_name='type') 
# df now looks like this: 
# 
# type  value 
# 0 Type_A x1 
# 1 Type_A y1 
# 2 Type_B x2 
# 3 Type_B y2 
# 4 Type_C x3 
# 5 Type_C y3 

pyupset_data = {key: df.loc[value] for key, value in df.groupby("type").groups.items()} 
0

Ich denke, es ist eigentlich nur ein einfaches Python-Diktat mit Werten als ganze Datenrahmen. Der Schlüssel ist der gewünschte Titel in der unteren Reihe.

Verwandte Themen