Suche…


Bemerkungen

Die offizielle Dokumentation zu Pandas enthält eine Seite mit den IO Tools, die eine Liste relevanter Funktionen zum Lesen und Schreiben von Dateien sowie einige Beispiele und allgemeine Parameter enthält.

CSV-Datei in DataFrame lesen

Beispiel für das Lesen der Datei data_file.csv wie:

Datei:

index,header1,header2,header3
1,str_data,12,1.4
3,str_data,22,42.33
4,str_data,2,3.44
2,str_data,43,43.34

7, str_data, 25, 23.32

Code:

pd.read_csv('data_file.csv')

Ausgabe:

   index    header1  header2  header3
0      1   str_data       12     1.40
1      3   str_data       22    42.33
2      4   str_data        2     3.44
3      2   str_data       43    43.34
4      7   str_data       25    23.32

Einige nützliche Argumente:

  • sep Das Standard - Feldtrennzeichen ist ein Komma , . Verwenden Sie diese Option, wenn Sie ein anderes Trennzeichen benötigen, beispielsweise pd.read_csv('data_file.csv', sep=';')

  • index_col Mit index_col = n ( n eine ganze Zahl) index_col = n Sie Pandas an, Spalte n zur Indexierung des DataFrame zu verwenden. Im obigen Beispiel:

    pd.read_csv('data_file.csv',  index_col=0)
    

    Ausgabe:

              header1  header2  header3
    index
     1       str_data       12     1.40
     3       str_data       22    42.33
     4       str_data        2     3.44
     2       str_data       43    43.34
     7       str_data       25    23.32
    
  • skip_blank_lines Standardmäßig werden leere Zeilen übersprungen. Verwenden Sie skip_blank_lines=False , um leere Zeilen skip_blank_lines=False (diese werden mit NaN Werten gefüllt).

    pd.read_csv('data_file.csv',  index_col=0,skip_blank_lines=False)
    

    Ausgabe:

             header1  header2  header3
    index
     1      str_data       12     1.40
     3      str_data       22    42.33
     4      str_data        2     3.44
     2      str_data       43    43.34
    NaN          NaN      NaN      NaN
     7      str_data       25    23.32
    
  • parse_dates Verwenden Sie diese Option, um parse_dates zu analysieren.

    Datei:

    date_begin;date_end;header3;header4;header5
    1/1/2017;1/10/2017;str_data;1001;123,45
    2/1/2017;2/10/2017;str_data;1001;67,89
    3/1/2017;3/10/2017;str_data;1001;0
    

    Code zum Analysieren der Spalten 0 und 1 als Datumsangaben:

    pd.read_csv('f.csv', sep=';', parse_dates=[0,1])
    

    Ausgabe:

      date_begin   date_end   header3  header4 header5
    0 2017-01-01 2017-01-10  str_data     1001  123,45
    1 2017-02-01 2017-02-10  str_data     1001   67,89
    2 2017-03-01 2017-03-10  str_data     1001       0
    

    Standardmäßig wird das Datumsformat abgeleitet. Wenn Sie ein Datumsformat angeben möchten, können Sie beispielsweise verwenden

    dateparse = lambda x: pd.datetime.strptime(x, '%d/%m/%Y')
    pd.read_csv('f.csv', sep=';',parse_dates=[0,1],date_parser=dateparse)
    

    Ausgabe:

      date_begin   date_end   header3  header4 header5
    0 2017-01-01 2017-10-01  str_data     1001  123,45
    1 2017-01-02 2017-10-02  str_data     1001   67,89
    2 2017-01-03 2017-10-03  str_data     1001       0   
    

Weitere Informationen zu den Funktionsparametern finden Sie in der offiziellen Dokumentation .

Grundlegendes Speichern in eine CSV-Datei

raw_data = {'first_name': ['John', 'Jane', 'Jim'],
            'last_name': ['Doe', 'Smith', 'Jones'],
            'department': ['Accounting', 'Sales', 'Engineering'],}
df = pd.DataFrame(raw_data,columns=raw_data.keys())
df.to_csv('data_file.csv')

Analysieren von Datumsangaben beim Lesen aus csv

Sie können eine Spalte angeben, die Datumsangaben enthält, damit Pandas diese beim Lesen aus der CSV automatisch analysieren

pandas.read_csv('data_file.csv', parse_dates=['date_column'])

Tabelle zum Diktieren von DataFrames

with pd.ExcelFile('path_to_file.xls) as xl:
    d = {sheet_name: xl.parse(sheet_name) for sheet_name in xl.sheet_names}

Lesen Sie ein bestimmtes Blatt

pd.read_excel('path_to_file.xls', sheetname='Sheet1')

Es gibt viele read_excel für read_excel (ähnlich den Optionen in read_csv .)

pd.read_excel('path_to_file.xls',
              sheetname='Sheet1', header=[0, 1, 2],
              skiprows=3, index_col=0)  # etc.

Read_csv wird getestet

import pandas as pd
import io

temp=u"""index; header1; header2; header3
1; str_data; 12; 1.4
3; str_data; 22; 42.33
4; str_data; 2; 3.44
2; str_data; 43; 43.34
7; str_data; 25; 23.32"""
#after testing replace io.StringIO(temp) to filename
df = pd.read_csv(io.StringIO(temp),  
                 sep = ';', 
                 index_col = 0,
                 skip_blank_lines = True)
print (df)
         header1   header2   header3
index                               
1       str_data        12      1.40
3       str_data        22     42.33
4       str_data         2      3.44
2       str_data        43     43.34
7       str_data        25     23.32

Listenverständnis

Alle Dateien sind im Ordner files . Erstellen Sie zunächst eine Liste mit DataFrames und concat diese:

import pandas as pd
import glob

#a.csv
#a,b
#1,2
#5,8

#b.csv
#a,b
#9,6
#6,4

#c.csv
#a,b
#4,3
#7,0

files = glob.glob('files/*.csv')
dfs = [pd.read_csv(fp) for fp in files]
#duplicated index inherited from each Dataframe
df = pd.concat(dfs)
print (df)
   a  b
0  1  2
1  5  8
0  9  6
1  6  4
0  4  3
1  7  0
#'reseting' index
df = pd.concat(dfs, ignore_index=True)
print (df)
   a  b
0  1  2
1  5  8
2  9  6
3  6  4
4  4  3
5  7  0
#concat by columns
df1 = pd.concat(dfs, axis=1)
print (df1)
   a  b  a  b  a  b
0  1  2  9  6  4  3
1  5  8  6  4  7  0
#reset column names
df1 = pd.concat(dfs, axis=1, ignore_index=True)
print (df1)
   0  1  2  3  4  5
0  1  2  9  6  4  3
1  5  8  6  4  7  0

Lesen Sie in Brocken

import pandas as pd    

chunksize = [n]
for chunk in pd.read_csv(filename, chunksize=chunksize):
    process(chunk)
    delete(chunk)

In CSV-Datei speichern

Mit Standardparametern speichern:

df.to_csv(file_name)

Schreiben Sie bestimmte Spalten:

df.to_csv(file_name, columns =['col'])

Difault-Trennzeichen ist ',' - um es zu ändern:

df.to_csv(file_name,sep="|")

Schreibe ohne Kopfzeile:

df.to_csv(file_name, header=False)

Schreiben Sie mit einem gegebenen Header:

df.to_csv(file_name, header = ['A','B','C',...]

Verwenden Sie das Kodierungsargument, um eine bestimmte Kodierung (z. B. 'utf-8') zu verwenden:

df.to_csv (Dateiname, Kodierung = 'utf-8')

Analysieren von Datumsspalten mit read_csv

Datumsangaben haben immer ein anderes Format, sie können mit einer bestimmten parse_dates-Funktion analysiert werden.

Diese input.csv :

2016 06 10 20:30:00    foo
2016 07 11 19:45:30    bar
2013 10 12 4:30:00     foo

Kann so analysiert werden:

mydateparser = lambda x: pd.datetime.strptime(x, "%Y %m %d %H:%M:%S")
df = pd.read_csv("file.csv", sep='\t', names=['date_column', 'other_column'], parse_dates=['date_column'], date_parser=mydateparser)

Das Argument parse_dates ist die zu analysierende Spalte
date_parser ist die Parser-Funktion

Lesen und Zusammenführen mehrerer CSV-Dateien (mit derselben Struktur) in einem DF

import os
import glob
import pandas as pd

def get_merged_csv(flist, **kwargs):
    return pd.concat([pd.read_csv(f, **kwargs) for f in flist], ignore_index=True)

path = 'C:/Users/csvfiles'
fmask = os.path.join(path, '*mask*.csv')

df = get_merged_csv(glob.glob(fmask), index_col=None, usecols=['col1', 'col3'])

print(df.head())

Wenn Sie CSV-Dateien horizontal zusammenführen möchten (Spalten hinzufügen), verwenden Sie axis=1 wenn Sie die Funktion pd.concat() aufrufen:

def merged_csv_horizontally(flist, **kwargs):
    return pd.concat([pd.read_csv(f, **kwargs) for f in flist], axis=1)

Lesen der cvs-Datei in einen Pandas-Datenrahmen, wenn keine Kopfzeile vorhanden ist

Wenn die Datei keine Kopfzeile enthält,

Datei:

1;str_data;12;1.4
3;str_data;22;42.33
4;str_data;2;3.44
2;str_data;43;43.34

7; str_data; 25; 23.32

Sie können die Schlüsselwortnamen names , um Spaltennamen anzugeben:

df = pandas.read_csv('data_file.csv', sep=';', index_col=0,
                     skip_blank_lines=True, names=['a', 'b', 'c'])

df
Out: 
           a   b      c
1   str_data  12   1.40
3   str_data  22  42.33
4   str_data   2   3.44
2   str_data  43  43.34
7   str_data  25  23.32

Verwenden von HDFStore

import string
import numpy as np
import pandas as pd

Beispiel-DF mit verschiedenen D-Typen erzeugen

df = pd.DataFrame({
     'int32':    np.random.randint(0, 10**6, 10),
     'int64':    np.random.randint(10**7, 10**9, 10).astype(np.int64)*10,
     'float':    np.random.rand(10),
     'string':   np.random.choice([c*10 for c in string.ascii_uppercase], 10),
     })

In [71]: df
Out[71]:
      float   int32       int64      string
0  0.649978  848354  5269162190  DDDDDDDDDD
1  0.346963  490266  6897476700  OOOOOOOOOO
2  0.035069  756373  6711566750  ZZZZZZZZZZ
3  0.066692  957474  9085243570  FFFFFFFFFF
4  0.679182  665894  3750794810  MMMMMMMMMM
5  0.861914  630527  6567684430  TTTTTTTTTT
6  0.697691  825704  8005182860  FFFFFFFFFF
7  0.474501  942131  4099797720  QQQQQQQQQQ
8  0.645817  951055  8065980030  VVVVVVVVVV
9  0.083500  349709  7417288920  EEEEEEEEEE

einen größeren DF erstellen (10 * 100.000 = 1.000.000 Zeilen)

df = pd.concat([df] * 10**5, ignore_index=True)

HDFStore-Datei erstellen (oder vorhandene öffnen)

store = pd.HDFStore('d:/temp/example.h5')

Speichern Sie unseren Datenrahmen in der h5 Datei (HDFStore) und indizieren Sie die Spalten [int32, int64, string]:

store.append('store_key', df, data_columns=['int32','int64','string'])

HDFStore-Details anzeigen

In [78]: store.get_storer('store_key').table
Out[78]:
/store_key/table (Table(10,)) ''
  description := {
  "index": Int64Col(shape=(), dflt=0, pos=0),
  "values_block_0": Float64Col(shape=(1,), dflt=0.0, pos=1),
  "int32": Int32Col(shape=(), dflt=0, pos=2),
  "int64": Int64Col(shape=(), dflt=0, pos=3),
  "string": StringCol(itemsize=10, shape=(), dflt=b'', pos=4)}
  byteorder := 'little'
  chunkshape := (1724,)
  autoindex := True
  colindexes := {
    "index": Index(6, medium, shuffle, zlib(1)).is_csi=False,
    "int32": Index(6, medium, shuffle, zlib(1)).is_csi=False,
    "string": Index(6, medium, shuffle, zlib(1)).is_csi=False,
    "int64": Index(6, medium, shuffle, zlib(1)).is_csi=False}

Zeige indizierte Spalten

In [80]: store.get_storer('store_key').table.colindexes
Out[80]:
{
    "int32": Index(6, medium, shuffle, zlib(1)).is_csi=False,
    "index": Index(6, medium, shuffle, zlib(1)).is_csi=False,
    "string": Index(6, medium, shuffle, zlib(1)).is_csi=False,
    "int64": Index(6, medium, shuffle, zlib(1)).is_csi=False}

Schließen Sie unsere Speicherdatei

store.close()

Nginx-Zugriffsprotokoll lesen (mehrere Anführungszeichen)

Verwenden Sie für mehrere Anführungszeichen regex anstelle von sep:

df = pd.read_csv(log_file,
              sep=r'\s(?=(?:[^"]*"[^"]*")*[^"]*$)(?![^\[]*\])',
              engine='python',
              usecols=[0, 3, 4, 5, 6, 7, 8],
              names=['ip', 'time', 'request', 'status', 'size', 'referer', 'user_agent'],
              na_values='-',
              header=None
                )


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow