ich eine ziemlich große csv haben, wie folgt aussehen:ein Datenrahmen in mehrere Gruppen Splitting und Speichern von CSV-Dateien zu trennen
+---------+---------+
| Column1 | Column2 |
+---------+---------+
| 1 | 93644 |
| 2 | 63246 |
| 3 | 47790 |
| 3 | 39644 |
| 3 | 32585 |
| 1 | 19593 |
| 1 | 12707 |
| 2 | 53480 |
+---------+---------+
Meine Absicht ist es,
- In einer neuen Spalte
- Fügen Sie einen bestimmten Wert in die Spalte 'NewColumnValue' in jeder Zeile des CSV ein
- Sortieren Sie die Datei basierend auf dem Wert in Column1
- Split die ursprüngliche CSV in neue Dateien basierend auf dem Inhalt von ‚Column1‘, das Entfernen der Header
Zum Beispiel möchte ich mit mehreren Dateien, um am Ende, die wie folgt aussehen:
+---+-------+----------------+
| 1 | 19593 | NewColumnValue |
| 1 | 93644 | NewColumnValue |
| 1 | 12707 | NewColumnValue |
+---+-------+----------------+
+---+-------+-----------------+
| 2 | 63246 | NewColumnValue |
| 2 | 53480 | NewColumnValue |
+---+-------+-----------------+
+---+-------+-----------------+
| 3 | 47790 | NewColumnValue |
| 3 | 39644 | NewColumnValue |
| 3 | 32585 | NewColumnValue |
+---+-------+-----------------+
Ich habe verwaltet diese mit separaten Py-Dateien zu tun:
Schritt 1
# -*- coding: utf-8 -*-
import pandas as pd
df = pd.read_csv('source.csv')
df = df.sort_values('Column1')
df['NewColumn'] = 'NewColumnValue'
df.to_csv('ready.csv', index=False, header=False)
Step2
import csv
from itertools import groupby
for key, rows in groupby(csv.reader(open("ready.csv")),
lambda row: row[0]):
with open("%s.csv" % key, "w") as output:
for row in rows:
output.write(",".join(row) + "\n")
Aber ich würde wirklich gerne lernen, wie alles in einer einzigen .py-Datei zu erreichen. Ich versuchte dies:
# -*- coding: utf-8 -*-
#This processes a large CSV file.
#It will dd a new column, populate the new column with a uniform piece of data for each row, sort the CSV, and remove headers
#Then it will split the single large CSV into multiple CSVs based on the value in column 0
import pandas as pd
import csv
from itertools import groupby
df = pd.read_csv('source.csv')
df = df.sort_values('Column1')
df['NewColumn'] = 'NewColumnValue'
for key, rows in groupby(csv.reader((df)),
lambda row: row[0]):
with open("%s.csv" % key, "w") as output:
for row in rows:
output.write(",".join(row) + "\n")
aber statt wie beabsichtigt, Es ist mir gibt nach jedem Spaltenkopf namens mehr CSVs.
Ist das passiert, weil ich die Headerzeile entfernt habe, wenn ich separate .py-Dateien verwendet habe, und ich mache es hier nicht? Ich bin nicht wirklich sicher, welche Operation ich tun muss, wenn ich die Dateien spalte, um den Header zu entfernen.
Vielen Dank für die Hilfe ein Selbstlerner Noob.
Danke. Und um deine Frage zu beantworten, war es, weil, als ich heute google nach einer Lösung für das Problem suchte, Pandas immer wieder auftauchten. Ich wusste nicht, dass es einen anderen Weg gab :) –
@SteveDallas Np. Wenn Sie sich entscheiden, es zu verwenden, können Sie [diese Antwort akzeptieren] (https://stackoverflow.com/help/someone-answers). –
Ich habe diese Methode ausprobiert und es werden einige seltsame Ausgabedateien erzeugt. Wenn ich meine Datei 13.csv als Beispiel nehme, erzeugt es eine Datei mit Kopfzeilen und zusätzlich scheint es, eine kopflose Spalte mit Daten einzufügen, die ich nicht kenne. z.B. \t + ------ + --------- + --------- + ---------------- + | | Spalte1 | Spalte2 | NeueSpalte | | 6446 | 13 | 36457 | NewColumnValue | + ------ + --------- + --------- + ---------------- + –