Как обрабатывать несколько разделителей в функции pd.read_csv в python? - PullRequest
0 голосов
/ 30 января 2020

У меня есть файл CSV с разделителем в виде ';'.

Приведенный ниже код обрабатывает CSV только с ';' в качестве разделителя.

dataset = pd.read_csv('/Data/formatted1.csv',header=0, delimiter = ';', encoding = 'unicode_escape')

Но, если CSV имеет разделитель как ',' или 'tab' или '\ n', он должен обрабатывать его динамически. Есть ли способ справиться со всеми из них динамически?

Я пробовал приведенный ниже код, но он не работает.

df = pd.read_csv('file.csv', delim_whitespace=True)

Ответы [ 2 ]

1 голос
/ 30 января 2020

ИМХО, вы можете использовать регулярные выражения,

import pandas as pd

df = pd.read_csv(PATH, sep=r'[,|;\t"]+(?=\S)', engine='python')

Вот несколько примеров,

from io import StringIO
import pandas as pd

s1 = """a|b|c
1|2|3
"""

s2 = """a;b;c
1;2;3
"""

print(pd.read_csv(StringIO(s1), sep=r'[,|;\t"]+(?=\S)', engine='python'))
print()
print(pd.read_csv(StringIO(s2), sep=r'[,|;\t"]+(?=\S)', engine='python'))

   a  b  c
0  1  2  3

   a  b  c
0  1  2  3
0 голосов
/ 30 января 2020

Надеюсь, это поможет. Вы можете использовать либо разделитель, либо сентябрь. См. Python Документация .

\ s - соответствует любому пробелу; это эквивалентно набору [\ t \ n \ r \ f \ v].

import pandas as pd
my_cols = [str(i) for i in range(45)] # create some row names
dataset = pd.read_csv('/Data/formatted1.csv', sep="\s+|;|,", names=my_cols, header=None, engine="python")

Благодаря @ Tai

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...