Mam plik CSV, w którym prawdopodobnie brakuje danych, a dane są zarówno znakami, jak i liczbami. Jak najlepiej sobie z tym poradzić?

1
Trup 9 sierpień 2011, 18:42

2 odpowiedzi

Najlepsza odpowiedź

Oto przykład:

Plik.csv

name,age,gender
aaa,20,m
bbb,25,
ccc,,m
ddd,40,f

PrzeczytajMójCSV.m

fid = fopen('file.csv','rt');
C = textscan(fid, '%s%f%s', 'Delimiter',',', 'HeaderLines',1, 'EmptyValue',NaN);
fclose(fid);
[name,age,gender] = deal(C{:});

Odczyt danych:

>> [name num2cell(age) gender]
ans = 
    'aaa'    [ 20]    'm'
    'bbb'    [ 25]    '' 
    'ccc'    [NaN]    'm'
    'ddd'    [ 40]    'f'
5
Amro 9 sierpień 2011, 18:57
Próbowałem tego, z jakiegoś powodu odczytuje tylko 1 linię i tworzy z niej tablicę komórek. Jak mogę sprawić, żeby wszystko uruchamiało, a potem mieć macierz ze wszystkimi danymi?
 – 
Trup
9 sierpień 2011, 19:12
A także, jak uzyskać podwójne z komórki?
 – 
Trup
9 sierpień 2011, 19:27
@Trup: dla przykładowego pliku powyżej działa dobrze. Jeśli masz inny format pliku CSV, opublikuj go w swoim pytaniu. Twoje pytanie było ogólne i jedynym sposobem na odpowiedź był zmyślony przykład...
 – 
Amro
9 sierpień 2011, 19:54

To, co zasugerował @Amro, to najczęstszy sposób odczytywania pliku csv z brakującymi wartościami. W twoim przypadku, ponieważ twoje typy danych to zarówno znaki, jak i liczby, powinieneś podać odpowiedni format każdej kolumny. Twoja funkcja powinna wyglądać mniej więcej tak:

C = textscan(fid, '%d32 %c %d8 %d8 %d32 %f32 %f %s ','HeaderLines', 1, 'Delimiter', ',');

Więcej formatów danych znajdziesz tutaj: http://www.mathworks.com/help/techdoc/ref/textscan.html

1
BenMorel 25 listopad 2013, 20:02
2
Problem typów takich jak int8,int32,etc... polega na tym, że nie obsługują one wartości NaN (zostają zastąpione zerami). Zobacz to powiązane pytanie: stackoverflow.com/questions/6657963/…
 – 
Amro
10 sierpień 2011, 02:01