2017-07-12 7 views
0

Ich bin ein Neuling in Python und mit Dataframe aus Pandas-Paket (Python3.6).ValueError: Arrays müssen alle gleich lang sein in Python mit Pandas DataFrame

ich es wie unten Code einrichten,

df = DataFrame({'list1': list1, 'list2': list2, 'list3': list3, 'list4': list4, 'list5': list5, 'list6': list6}) 

und es einen Fehler gibt, wie ValueError: arrays must all be same length

So überprüfte ich die ganze Länge des Arrays und list1 & list2 haben 1 mehr Daten als andere Listen . Wenn ich den anderen 4 Listen (list3, list4, list5, list6) 1 Daten hinzufügen möchte, indem ich pd.resample verwende, wie soll ich Code schreiben ...?

Auch diese Listen sind Zeitreihenliste mit 1 Minute.

Hat jemand eine Idee oder hilft mir hier draußen?

Vielen Dank im Voraus.

BEARBEITEN Also änderte ich, was EdChum sagte. und Zeitliste an der Vorderseite hinzugefügt. es ist wie unten.

2017-04-01 0:00 895.87 730 12.8 4 19.1 380 
2017-04-01 0:01 894.4 730 12.8 4 19.1 380 
2017-04-01 0:02 893.08 730 12.8 4 19.3 380 
2017-04-01 0:03 890.41 730 12.8 4 19.7 380 
2017-04-01 0:04 889.28 730 12.8 4 19.93 380 

und tippte ich Code wie

df.resample('1min', how='mean', fill_method='pad') 

Und es gibt mir diese Fehlermeldung: TypeError: Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex, but got an instance of 'RangeIndex'

+1

Ich muss dies für Sie buchstabieren, weil Sie nicht zu verstehen scheinen, der Index muss Datum-Zeit basiert sein, der Fehler sagt Ihnen, dass es nicht ist, alles, was Sie taten Fügen Sie eine Spalte hinzu, die eine Datetime ist, Ihr Index nicht. Wenn Sie (df.index) eingeben, wird 'RangeIndex' angezeigt, müssen Sie' df tun.set_index (df ['datetime_col_name'], inplace = True) 'und dann' resample' aufrufen – EdChum

+0

@EdChum Ah ha ... ich verstehe .. Danke ..: '(yeah ... ich habe es nicht verstanden ..: (Ich werde es irgendwie ausprobieren .. Danke für die Unterstützung und antworte nochmal! :) – paulc1111

Antwort

3

ich nur ein Series für jede Liste bauen würde und dann concat sie alle:

In [38]: 
l1 = list('abc') 
l2 = [1,2,3,4] 
s1 = pd.Series(l1, name='list1') 
s2 = pd.Series(l2, name='list2') 
df = pd.concat([s1,s2], axis=1) 
df 

Out[38]: 
    list1 list2 
0  a  1 
1  b  2 
2  c  3 
3 NaN  4 

Wie Sie eineübergeben könnenarg für die Series Ctor wird es jede Spalte in der df nennen, plus es wird NaN Ort, wo die Säulenlängen nicht übereinstimmen

resample bezieht sich auf, wenn Sie eine DatetimeIndex, für die Sie die Länge rebase oder anpassen möchten basierend auf einem bestimmten Zeitraum, der hier nicht erwünscht ist. Sie wollen reindex was ich denke, ist nicht notwendig und chaotisch:

In [40]: 
l1 = list('abc') 
l2 = [1,2,3,4] 
s1 = pd.Series(l1) 
s2 = pd.Series(l2) 
df = pd.DataFrame({'list1':s1.reindex(s2.index), 'list2':s2}) 
df 

Out[40]: 
    list1 list2 
0  a  1 
1  b  2 
2  c  3 
3 NaN  4 

Hier haben Sie die längste Länge zu wissen brauchen würde und dann reindex alle Serie diesen Index verwenden, wenn Sie nur concat es wird automatisch die Länge anpassen und füllen fehlende Elemente mit NaN

+0

Danke für die Antwort :). Wenn ich das df resample, was soll ich tun? – paulc1111

+0

Resampling impliziert, dass Ihr Index ein DatetimeIndex ist, Sie nach 'Reindex' sind, kann ich ein kleines Snippet hinzufügen, aber mit' concat' funktioniert nur – EdChum

+0

Ah ha, danke für die Bearbeitung. : D Ich werde versuchen, zuerst "Reindex" und lass es dich wissen. :) – paulc1111

0

nach this documentation, es ziemlich schwierig, sieht dies mit pd.resample() zu tun: Sie sollten eine Frequenz berechnen, das nur einen Wert zu Ihrem df hinzufügen und die Funktion für dieses ^^ scheint wirklich nicht gemacht (scheint erlauben einfache Umformung, zB: 1 ​​min bis 30sec oder 1h)! Sie sollten besser versuchen, was EdChum tat: P

Verwandte Themen