Ich habe eine Person gesehen, die Schwierigkeiten hat, selbst eine Doppelschleife zu schreiben, um CSV wie die folgende in Python zu lesen, daher werde ich vier typische Lesemethoden zusammenfassen.
sample.csv
1,2,3
4,5,6
7,8,9
10,11,12
Darüber hinaus wird StringIO hier verwendet, um das Lesen von Dateien zu emulieren. Wenn Sie es jedoch tatsächlich verwenden, lesen Sie es bitte als offene Funktion oder als Zeichenfolge des Dateinamens.
Verwendung von CSV, einer Standardbibliothek von Python. Es kann den Vorteil haben, nur mit der Standardbibliothek zu arbeiten, aber in Wirklichkeit ist es unwahrscheinlich, dass Sie Daten, die nur numerische Werte enthalten, als Doppelliste behandeln.
Beachten Sie, dass jedes Element immer noch eine Zeichenfolge ist. Daher setzen wir "map (int, row)" dazwischen, um es als Zahl zu konvertieren.
from io import StringIO
import csv
s = """1,2,3
4,5,6
7,8,9
10,11,12"""
with StringIO(s) as csvfile:
csvreader = csv.reader(csvfile)
rows = []
for row in csvreader:
rows.append(list(map(int, row)))
#oder Listeneinschlussnotation
with StringIO(s) as csvfile:
csvreader = csv.reader(csvfile)
rows = [list(map(int, row)) for row in csvreader]
import numpy as np
arr = np.array(rows)
numpy
loadtxt und [genfromtxt](https://numpy.org/doc/stable/reference/generated /numpy.genfromtxt.html?highlight=genfromtxt#numpy.genfromtxt). Beide haben ähnliche Schnittstellen, aber genfromtxt ist etwas ausgefeilter, da es fehlende Werte ersetzen kann.
numpy.loadtxt
from io import StringIO
import numpy as np
s = """1,2,3
4,5,6
7,8,9
10,11,12"""
with StringIO(s) as csvfile:
arr = np.loadtxt(csvfile, delimiter=",", dtype=int)
numpy.genfromtxt
from io import StringIO
import numpy as np
s = """1,2,3
4,5,6
7,8,9
10,11,12"""
with StringIO(s) as csvfile:
arr = np.genfromtxt(csvfile, delimiter=",", dtype=int)
pandas
np.genfromtxt kann auch fehlende Werte verarbeiten, aber Pandas sind möglicherweise leichter zu finden.
pandas.read_csv
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html
Dieses Mal wird es als CSV ohne Header behandelt. Setzen Sie also die Option "Header = Keine".
from io import StringIO
import pandas as pd
s = """1,2,3
4,5,6
7,8,9
10,11,12"""
with StringIO(s) as csvfile:
df = pd.read_csv(csvfile, header=None, dtype=int)
arr = df.values
Bitte lassen Sie mich wissen, ob es eine andere bequeme Methode gibt.
Recommended Posts