2015-07-02 14 views
5

Wygląda na to, że funkcja pandy to_csv zezwala tylko na separatory/separatory pojedynczego znaku. Czy jest jakiś sposób, aby zezwolić na użycie ciągu znaków, np. "* | *" Lub "%%"?Użyj wielu ograniczników znaków w Pandonie Pythona to_csv

+0

dlaczego chcesz więcej niż jednego? –

+1

Ponieważ mam kilka kolumn z niesformatowanym tekstem, które mogą zawierać znaki takie jak "|", "\ t", "," itp. Prawdopodobieństwo, że ktoś napisze "%%" jest znacznie niższe ... – slaw

Odpowiedz

1

Rozwiązaniem byłoby wykorzystanie read_table zamiast read_csv:

1*|*2*|*3*|*4*|*5 
12*|*12*|*13*|*14*|*15 
21*|*22*|*23*|*24*|*25 

Więc możemy przeczytać z:

pd.read_table('file.csv', header=None, sep='\*\|\*') 
4

Jak pisze Padraic Cunningham w powyższym komentarzu, nie jest jasne, dlaczego tego chcesz. W Wiki entry for the CSV Spec stany o ograniczniki:

... oddzielone separatorami (zazwyczaj pojedynczego zastrzeżonego charakteru takich jak przecinek, średnik, lub karcie; czasami ogranicznik może zawierać opcjonalną spacji),

To nic dziwnego że zarówno csv module jak i pandy nie obsługują tego, o co prosisz.

Jednakże, jeśli naprawdę chcesz to zrobić, jesteś w zasadzie za pomocą manipulacji ciągiem Pythona. Poniższy przykład pokazuje, jak zmienić ramkę danych na "csv" z $$ liniami oddzielającymi i %% kolumnami oddzielającymi.

'$$'.join('%%'.join(str(r) for r in rec) for rec in df.to_records()) 

Oczywiście, nie trzeba przekształcać go w taki ciąg przed zapisaniem go do pliku.

Powiązane problemy