python 3.5.2
numpy 1.11.1
Ich habe Probleme erstellen dataframe
von einem 2-dimensional list
Erstellen von Aufspaltung eine Textdatei erstellt. Hier ist ein Beispiel der Textdatei:kann keine Pandas Datenrahmen aus 2D-Liste
#freq [MHz] #flags #total %flagged\n947.6 1451736.0 1451736.0
1.0\n947.615625 1451736.0 1451736.0 1.0\n947.63125 1451736.0 1451736.0
1.0\n947.646875 1451736.0 1451736.0 1.0\n947.6625 1451736.0 1451736.0
1.0\n947.678125 1451736.0 1451736.0 1.0\n947.69375 1451736.0 1451736.0
1.0\n947.709375 1451736.0 1451736.0 1.0\n947.725 1451736.0 1451736.0
1.0\n947.740625 1451736.0 1451736.0 1.0\n947.75625 1451736.0 1451736.0
1.0\n947.771875 1451736.0 1451736.0 1.0\n947.7875 1451736.0 1451736.0
1.0\n947.803125 1451736.0 1451736.0 1.0\n947.8 ....
So sind die Linien durch \n
getrennt sind, und jede Spalte durch eine space
getrennt ist. Ich analysiere this out mit:
obs_array = []
obs_1 = obs_txts[obs].split('\n')
for i in range(0,len(obs_1)):
obs_array.append(obs_1[i].split(' '))
So bekomme ich obs_array
als 2-dimensionale Liste. Ich werde die first row
(nur Spaltennamen, ich werde umbenennen, sobald ich eine funktionierende dataframe
habe) und die last row
, die nur eine leere ''
ist. Also, ich habe jetzt eine zweidimensionale Liste, die 30720 rows
und 4 columns
hat. Ich kann dies in ein Array umwandeln:
obs_array = np.array(obs_array)
aber die Form dieses Arrays zurück (30720,). Ich überprüfte die Länge jeder Reihe, jedes gibt 4 zurück und versucht, die Form zu zwingen, zu sein (30720,4) gibt eine size error
zurück. Ich weiß sicher, dass es 30720 Zeilen geben sollte. Setzen dieses in eine dataframe
obs_df = pd.DataFrame(obsarray)
kehrt
0
0 [947.6, 1451736.0, 1451736.0, 1.0]
1 [947.615625, 1451736.0, 1451736.0, 1.0]
2 [947.63125, 1451736.0, 1451736.0, 1.0]
3 [947.646875, 1451736.0, 1451736.0, 1.0]
4 [947.6625, 1451736.0, 1451736.0, 1.0]
Mit anderen Worten, ein 30720x1 dimensioned dataframe
wobei jede Zeile einen Eintrag hat: eine Liste dieser Zeile.
Was geht hier vor? Warum kann ich Python nicht dazu bringen, obs_array mit der Form (30720,4)
zu interpretieren? Danke für jede Hilfe.
Ich bin wirklich verwirrt, warum Sie 'pd.read_table' nicht einfach verwenden können, um die Datei zu importieren? Versuchen Sie auf jeden Fall, obs_df = pd.DataFrame.from_records (obs_array) '. – Abdou
War pd.read_table nicht bekannt. Dies funktioniert, wenn auch etwas grob, da es die erste Zeile mit 6 Elementen interpretiert, aber das ist leicht zu beheben. Vielen Dank! – socxc9