2016-09-13 10 views
5

Chciałbym przeczytać przykładowy plik csv pokazany na poniżejJak odczytywać dziwne pliki CSV w Pandach?

-------------- 
|A|B|C| 
-------------- 
|1|2|3| 
-------------- 
|4|5|6| 
-------------- 
|7|8|9| 
-------------- 

Próbowałem

pd.read_csv("sample.csv",sep="|") 

Ale to nie działa dobrze.

Jak mogę przeczytać ten plik CSV?

Odpowiedz

11

Możesz dodać parametr comment do read_csv a następnie usunąć kolumny z NaN przez dropna:

import pandas as pd 
import io 

temp=u"""-------------- 
|A|B|C| 
-------------- 
|1|2|3| 
-------------- 
|4|5|6| 
-------------- 
|7|8|9| 
--------------""" 
#after testing replace io.StringIO(temp) to filename 
df = pd.read_csv(io.StringIO(temp), sep="|", comment='-').dropna(axis=1, how='all') 

print (df) 
    A B C 
0 1 2 3 
1 4 5 6 
2 7 8 9 

bardziej ogólne rozwiązanie:

import pandas as pd 
import io 

temp=u"""-------------- 
|A|B|C| 
-------------- 
|1|2|3| 
-------------- 
|4|5|6| 
-------------- 
|7|8|9| 
--------------""" 
#after testing replace io.StringIO(temp) to filename 
#separator is char which is NOT in csv 
df = pd.read_csv(io.StringIO(temp), sep="^", comment='-') 

#remove first and last | in data and in column names 
df.iloc[:,0] = df.iloc[:,0].str.strip('|') 
df.columns = df.columns.str.strip('|') 
#split column names 
cols = df.columns.str.split('|')[0] 
#split data 
df = df.iloc[:,0].str.split('|', expand=True) 
df.columns = cols 
print (df) 
    A B C 
0 1 2 3 
1 4 5 6 
2 7 8 9 
1

Try "import csv", zamiast korzystać bezpośrednio pandy.

import csv 

easy_csv = [] 

with open('sample.csv', 'rb') as csvfile: 
    test = csv.reader(csvfile, delimiter=' ', quotechar='|') 
    for row in test: 
     row_preprocessed = """ handling rows at here; removing |, ignoring row that has ----""" 
     easy_csv.append([row_preprocessed]) 

Po tym wyprzedzającym, można zapisać je do plików csv oddzielone przecinkami łatwo obsługiwać na pand.

0

próbuję ten kod i jest ok!

import pandas as pd 
import numpy as np 
a = pd.read_csv("a.csv",sep="|") 
print(a) 
for i in a: 
    print(i) 

enter image description here

Powiązane problemy