2017-12-15 1 views
1

Ich möchte Daten von einer .Data-Datei in eine CSV-Datei konvertieren und die Daten aus der .Data-Datei in Spalten mit Werten unter ihnen . Die .data-Datei hat jedoch ein bestimmtes Format, und ich weiß nicht, wie ich den Text in Spalten einfügen soll. Hier ist, wie die .data Datei wie folgt aussieht:Konvertieren von Daten aus .Data-Datei in CSV-Datei und Daten in Spalten mit Pandas

column1 
column2 
column3 
column4 
column5 
column6 
column7 
column8 
column9 
column10 
column11 
column12 
column13 
........ 
column36 

1243;6543;5754;5678;4567;4567;4567;2573;7532;6332;6432;6542;5542;7883;7643;4684;4568;4573 
3567;5533;6532;6432;7643;8635;7654;6543;8753;7643;7543;7543;7543;6543;6444;7543;6444;6444 

1243;6543;5754;5678;4567;4567;4567;2573;7532;6332;6432;6542;5542;7883;7643;4684;4568;4573 
3567;5533;6532;6432;7643;8635;7654;6543;8753;7643;7543;7543;7543;6543;6444;7543;6444;6444 

1243;6543;5754;5678;4567;4567;4567;2573;7532;6332;6432;6542;5542;7883;7643;4684;4568;4573 
3567;5533;6532;6432;7643;8635;7654;6543;8753;7643;7543;7543;7543;6543;6444;7543;6444;6444 

1243;6543;5754;5678;4567;4567;4567;2573;7532;6332;6432;6542;5542;7883;7643;4684;4568;4573 
3567;5533;6532;6432;7643;8635;7654;6543;8753;7643;7543;7543;7543;6543;6444;7543;6444;6444 

Die Datei, wie oben gezeigt, die Namen von 36 Spalten, die jeweils auf 1 Zeile. Darunter befinden sich viele Datenpunkte mit 36 ​​Werten, die durch Semikolons getrennt sind. Die Datenpunkte sind 2 Zeilen lang und jeder Datenpunkt ist durch eine Leerzeile getrennt. Die CSV-Datei muss wie folgt aussehen:

column1,column2,column3,column4,column5,column6,column7,column8,column9,column10,column11,column12,column14,column15,column16,column17,column18,column20,column20,column21,column22,column23,column24,column25,column26,column27,column28,column29,column30,column31,column32,column33,column34,column35,column36 
1243,6543,5754,5678,4567,4567,4567,2573,7532,6332,6432,6542,5542,7883,7643,4684,4568,4573,3567,5533,6532,6432,7643,8635,7654,6543,8753,7643,7543,7543,7543,6543,6444,7543,6444,6444 
1243,6543,5754,5678,4567,4567,4567,2573,7532,6332,6432,6542,5542,7883,7643,4684,4568,4573,3567,5533,6532,6432,7643,8635,7654,6543,8753,7643,7543,7543,7543,6543,6444,7543,6444,6444 
1243,6543,5754,5678,4567,4567,4567,2573,7532,6332,6432,6542,5542,7883,7643,4684,4568,4573,3567,5533,6532,6432,7643,8635,7654,6543,8753,7643,7543,7543,7543,6543,6444,7543,6444,6444 
1243,6543,5754,5678,4567,4567,4567,2573,7532,6332,6432,6542,5542,7883,7643,4684,4568,4573,3567,5533,6532,6432,7643,8635,7654,6543,8753,7643,7543,7543,7543,6543,6444,7543,6444,6444 

Die erste Zeile der CSV-Datei, wie oben gezeigt, von 36 Spalten mit den Namen in ihm durch Komma getrennt bestehen muß. Die nächsten Zeilen müssen aus allen Datenpunkten bestehen, jeder auf einer Zeile und die 36 Werte müssen durch Kommas getrennt sein.

Können Sie die Software-Bibliothek 'Pandas' dafür verwenden? Wie auch immer, dies ist mein Startcode:

with open("file.data") as fIn, open("file.csv", "w") as fOut: 
    for r, line in enumerate(fIn): 
     if not line: 
      break 

Dank

+0

Haben Sie versucht, mit 'pd.read_csv', können Sie auf die Dokumentation aussehen seine basic https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html – Dark

+0

Ich weiß nicht, ich bin ziemlich neu dazu Ich habe es versucht: data = pd.read_csv ("file.csv"). aber ich weiß nicht, was damit zu tun ist –

Antwort

2

Sicher, dass Sie es mit Pandas tun können. Sie müssen nur zuerst lesen N Zeilen (36 in Ihrem Fall), um sie als Header zu verwenden und lesen Rest der Datei wie normale csv (Pandas gut darin). Dann können Sie pandas.DataFrame Objekt zu CSV speichern.

Da Ihre Daten in benachbarte Zeilen aufgeteilt wurden, sollten wir DataFrame, das wir gelesen haben, auf zwei teilen und sie nebeneinander (horizontal) stapeln.

Betrachten Sie den folgenden Code ein:

import pandas as pd 

COLUMNS_COUNT = 36 
# read first `COLUMNS_COUNT` lines to serve as a header 
with open('data.data', 'r') as f: 
    columns = [next(f).strip() for line in range(COLUMNS_COUNT)] 
# read rest of the file to temporary DataFrame 
temp_df = pd.read_csv('data.data', skiprows=COLUMNS_COUNT, header=None, delimiter=';', skip_blank_lines=True) 
# split temp DataFrame on even and odd rows 
even_df = temp_df.iloc[::2].reset_index(drop=True) 
odd_df = temp_df.iloc[1::2].reset_index(drop=True) 
# stack even and odd DataFrames horizontaly 
df = pd.concat([even_df, odd_df], axis=1) 
# assign column names 
df.columns = columns 
# save result DataFrame to csv 
df.to_csv('out.csv', index=False) 

UPD: Code aktualisiert, um Daten korrekt auf zwei Linien aufgeteilt zu verarbeiten

+1

OP könnte CSV selbst als Ausgabe benötigen. Vielleicht müssen Sie 'to_csv' auch zu – Dark

+0

guten Punkt hinzufügen, verpasst das. Auch bemerkt man eine 'strip()' Zeilen vor der Verwendung als col Namen – 9dogs

+0

Ohh hast du meine Stimme;) einen schönen Tag haben – Dark

Verwandte Themen