2016-09-13 6 views
5

Я хотел бы прочитать образец файла CSV, показанный в нижеКак читать странные файлы csv в Pandas?

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

Я попытался

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

Но это не сработало.

Как я могу прочитать этот csv?

ответ

11

Вы можете добавить параметр comment в read_csv, а затем удалить столбцы с NaN по 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 

Более общее решение:

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 "импорт CSV", а не напрямую использовать панда.

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]) 

После предварительной обработки, вы можете сохранить его в разделенных запятыми CSV файлы легко обрабатывать на панд.

0

я попробовать этот код и его хорошо:

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

Смежные вопросы