2016-04-21 8 views
2

Ich habe eine CSV-Datei, in der es immer zwei erste Spalten, aber mit unterschiedlicher Anzahl von Spalten für verschiedene Dateien. Die csv kann wie folgt aussehen:Laden CSV von verschiedenen Spalten Nummer mit Pandas

Gondi,4012,227,233,157,158,149,158 
Gondi,4013,227,231,156,159,145,153 
Gondu,4014,228,233,157,158,145,153 
Gondu,4015,227,231,156,159,149,158 

Vorerst ich mit NumPy arbeite, und mein Code, um diese Daten zu laden ist:

import numpy as np 
def readfile(fname): 
    with open(fname) as f: 
     ncols = len(f.readline().split(',')) 
    name = np.loadtxt(fname, delimiter=',', usecols=[0],dtype=str) 
    ind = np.loadtxt(fname, delimiter=',', usecols=[1],dtype=int) 
    data = np.loadtxt(fname, delimiter=',', usecols=range(2,ncols),dtype=int) 
    return data,name,ind 

Kann ich das gleiche tun mit pandas effizienter?

Antwort

1

ich glaube, Sie read_csv und iloc für ausgewählte erste, zweite und andere Spalten verwenden können:

import pandas as pd 
import io 

temp=u"""Gondi,4012,227,233,157,158,149,158 
Gondi,4013,227,231,156,159,145,153 
Gondu,4014,228,233,157,158,145,153 
Gondu,4015,227,231,156,159,149,158""" 
#after testing replace io.StringIO(temp) to filename 
df = pd.read_csv(io.StringIO(temp), header=None) 
print df 

name = df.iloc[:,0] 
print name 
0 Gondi 
1 Gondi 
2 Gondu 
3 Gondu 
Name: 0, dtype: object 

ind = df.iloc[:,1] 
print ind 
0 4012 
1 4013 
2 4014 
3 4015 
Name: 1, dtype: int64 

data = df.iloc[:,2:] 
print data 
    2 3 4 5 6 7 
0 227 233 157 158 149 158 
1 227 231 156 159 145 153 
2 228 233 157 158 145 153 
3 227 231 156 159 149 158 
+0

Wie funktioniert es? – jezrael

Verwandte Themen