2016-04-29 26 views
-2

Ich habe mehrere CSV-Dateien, die ich zusammengeführt habe. Allerdings muss ich zwischen den einzelnen Dateien eine leere Zeile einfügen, damit sie zusammenführen, sodass ich weiß, dass an diesem Punkt eine andere Datei beginnt. Versuchte alles. Bitte helfen Sie.Wie füge ich eine leere Zeile zwischen zusammengeführten Dateien hinzu

+2

Bitte stellen Sie sicher, dass Sie Ihren Code co formatieren Richtig, momentan ist der Einzug gebrochen, was in Python ein Show-Stopper ist. –

+0

Mein Code funktioniert gut.Es ist nur die leere Zeile, die ich hinzufügen möchte. Nur weil Sie nicht denken, dass die Einrückung korrekt ist, bedeutet das, dass ich einen Downvote bekomme? – bonbon

+0

Nicht weil ich denke, dass es falsch ist, sondern weil [es ist tatsächlich falsch] (https://ideone.com/yuQgvL). Die Funktion in Zeile 4 hat keinen Körper. Ausgehend von Zeile 5 haben Sie eine Einrückungsebene verloren. Vielleicht war es nur, als du deine Frage geschrieben hast, aber das ändert nichts daran, dass es falsch ist. Als solche fehlt diese Frage in der Qualität, und für mich sagt es, dass Sie nicht genug Mühe ausgegeben haben, es zu schreiben. Wenn sich das ändert, werde ich gerne meine Stimme neu bewerten. –

Antwort

1

Hier ist ein Beispielskript. Sie können die Methode mit einem nicht vorhandenen Schlüssel für enlarge the DataFrame verwenden und den Wert der neuen Zeile festlegen.

Die einfachste Lösung scheint zu sein, eine Vorlage DataFrame zu erstellen, die als Trennzeichen mit den gewünschten Werten verwendet wird. Dann fügen Sie es einfach in die Liste der Datenrahmen ein, um an geeigneten Positionen zu verketten.

Zuletzt entfernte ich die chdir, da glob in jedem Pfad suchen kann.

import glob 
import pandas 


def concatenate(input_dir, output_file_name): 
    file_list=glob.glob(input_dir + "/*.csv") 

    column_names=["Creation Date" 
     , "Author" 
     , "Tweet" 
     , "Language" 
     , "Location" 
     , "Country" 
     , "Continent"] 

    # Create a separator template 
    separator = pandas.DataFrame(columns=column_names) 
    separator.loc[0] = [""]*7 

    dataframes = [] 
    for file_name in file_list: 
     print(file_name) 
     if len(dataframes): 
      # The list is not empty, so we need to add a separator 
      dataframes.append(separator) 
     dataframes.append(pandas.read_csv(file_name)) 

    concatenated = pandas.concat(dataframes, axis=0) 
    concatenated.to_csv(output_file_name, index=None) 
    print(concatenated) 


concatenate("input", ".out.csv") 

Eine alternative, auch kürzer ist die Art und Weise verketteten DataFrame iterativ zu bauen, die append Methode.

def concatenate(input_dir, output_file_name): 
    file_list=glob.glob(input_dir + "/*.csv") 

    column_names=["Creation Date" 
     , "Author" 
     , "Tweet" 
     , "Language" 
     , "Location" 
     , "Country" 
     , "Continent"] 

    concatenated = pandas.DataFrame(columns=column_names) 
    for file_name in file_list: 
     print(file_name) 
     if len(concatenated): 
      # The list is not empty, so we need to add a separator 
      concatenated.loc[len(concatenated)] = [""]*7 
     concatenated = concatenated.append(pandas.read_csv(file_name)) 

    concatenated.to_csv(output_file_name, index=None) 
    print(concatenated) 

testete ich das Skript mit 3 Eingang CSV-Dateien:

Eingabe/1.csv

Creation Date,Author,Tweet,Language,Location,Country,Continent 
2015-12-17,foo,Hello,EN,London,UK,Europe 
2015-12-18,bar,Bye,EN,Manchester,UK,Europe 
2015-12-28,baz,Hallo,DE,Frankfurt,Germany,Europe 

Eingabe/2.csv

Creation Date,Author,Tweet,Language,Location,Country,Continent 
2016-01-09,bar,Tweeeeet,EN,New York,USA,America 
2016-01-09,cat,Miau,FI,Helsinki,Finland,Europe 

Eingabe/3.csv

Creation Date,Author,Tweet,Language,Location,Country,Continent 
2018-12-12,who,Hello,EN,Delhi,India,Asia 

Als ich es lief, wurde das folgende auf der Konsole geschrieben:

Konsolenausgabe (mit concat)

input\1.csv 
input\2.csv 
input\3.csv 
    Creation Date Author  Tweet Language Location Country Continent 
0 2015-12-17 foo  Hello  EN  London  UK Europe 
1 2015-12-18 bar  Bye  EN Manchester  UK Europe 
2 2015-12-28 baz  Hallo  DE Frankfurt Germany Europe 
0 
0 2016-01-09 bar Tweeeeet  EN New York  USA America 
1 2016-01-09 cat  Miau  FI Helsinki Finland Europe 
0 
0 2018-12-12 who  Hello  EN  Delhi India  Asia 

Die Konsolenausgabe der kürzeren Variante ist etwas anders (beachten Sie die Indizes in th Die erste Spalte), hat jedoch keine Auswirkungen auf die generierte CSV-Datei.

Konsolenausgabe (mit Anhängen)

input\1.csv 
input\2.csv 
input\3.csv 
    Creation Date Author  Tweet Language Location Country Continent 
0 2015-12-17 foo  Hello  EN  London  UK Europe 
1 2015-12-18 bar  Bye  EN Manchester  UK Europe 
2 2015-12-28 baz  Hallo  DE Frankfurt Germany Europe 
3 
0 2016-01-09 bar Tweeeeet  EN New York  USA America 
1 2016-01-09 cat  Miau  FI Helsinki Finland Europe 
6 
0 2018-12-12 who  Hello  EN  Delhi India  Asia 

schließlich das ist, was die Ausgabe CSV es wie erzeugt Aussehen Datei:

out.csv

Creation Date,Author,Tweet,Language,Location,Country,Continent 
2015-12-17,foo,Hello,EN,London,UK,Europe 
2015-12-18,bar,Bye,EN,Manchester,UK,Europe 
2015-12-28,baz,Hallo,DE,Frankfurt,Germany,Europe 
,,,,,, 
2016-01-09,bar,Tweeeeet,EN,New York,USA,America 
2016-01-09,cat,Miau,FI,Helsinki,Finland,Europe 
,,,,,, 
2018-12-12,who,Hello,EN,Delhi,India,Asia 
Verwandte Themen