2014-12-01 1 views
0

У меня есть CSV-файл вид:чтение CSV-данные с пропущенными значениями в питон с помощью панда

"row ID","label","val" 
"Row0","5",6 
"Row1","",6 
"Row2","",6 
"Row3","5",7 
"Row4","5",8 
"Row5",,9 
"Row6","nan", 
"Row7","nan", 
"Row8","nan",0 
"Row9","nan",3 
"Row10","nan", 

Все приведенные данные являются строками. Номера без кавычек являются численными. Пустое поля отсутствуют значения (NaN), Quoted empty fields по-прежнему следует рассматривать как пустые строки. Я попытался прочитать его с помощью pandas read_csv, но я не могу заставить его работать так, как хотелось бы ... Он все еще считает «,» и «NaN», хотя это не относится к первому.

d = pd.read_csv(csv_filename, sep=',', keep_default_na=False, na_values=[''], quoting = csv.QUOTE_NONNUMERIC) 

Помочь ли кому-нибудь? Это вообще возможно?

ответ

0

Я нашел способ, чтобы получить более или менее работать. Я просто не знаю, почему мне нужно указать dtype = type (None), чтобы заставить его работать ... Комментарии к этому фрагменту кода очень приветствуются!

import re 
import pandas as pd 
import numpy as np 

# clear quoting characters 
def filterTheField(s): 
    m = re.match(r'^"?(.*)?"$', s.strip()) 
    if m: 
     return m.group(1) 
    else: 
     return np.nan 

file = 'test.csv' 

y = np.genfromtxt(file, delimiter = ',', filling_values = np.nan, names = True, dtype = type(None), converters = {'row_ID': filterTheField, 'label': filterTheField,'val': float}) 

d = pd.DataFrame(y) 

print(d) 
0

Может быть что-то вроде:

import pandas as pd 
import csv 
import numpy as np 
d = pd.read_csv('test.txt', sep=',', keep_default_na=False, na_values=[''], quoting = csv.QUOTE_NONNUMERIC) 
mask = d['label'] == 'nan' 
d.label[mask] = np.nan 
+0

но я хочу сохранить «nan» и «» как строки, а не как отсутствующие значения. – July

1

Вы можете попробовать с numpy.genfromtxt и указать параметр missing_values

http://docs.scipy.org/doc/numpy/reference/generated/numpy.genfromtxt.html

+0

Можете ли вы мне помочь? Я попытался: d = np.genfromtxt ('test.csv', delimiter = ',', missing_values ​​= [], names = True, dtype = [('row_ID', np.dtype (str)), ('label' , np.dtype (str)), ('val', np.dtype (float))]), но он возвращает пустые строки для всех (!) значений столбцов строки. Я не знаю, что не так ... – July