2014-10-24 3 views
8

У меня есть некоторые данные, которые выглядят следующим образом:импорт текста в панду с несколькими разделителями

c stuff 
c more header 
c begin data   
1 1:.5 
1 2:6.5 
1 3:5.3 

Я хочу, чтобы импортировать его в кадр данных, 3 колонков, с колоннами например

a , b, c 
1, 1, 0.5 
etc 

Я пытался читать данные в 2 колонки разделены на «:», а затем разделить первый столбец на «». Однако я нахожу это неприятным. Есть ли лучший способ разобраться с импортом напрямую?

в настоящее время:

data1 = pd.read_csv(file_loc, skiprows = 3, delimiter = ':', names = ['AB', 'C']) 
data2 = pd.DataFrame(data1.AB.str.split(' ',1).tolist(), names = ['A','B']) 

Однако это осложняется еще и тем, мои данные есть ведущее место ...

Я чувствую, как это должно быть простой задачей, но в настоящее время я имею в виду прочтения его по строкам и с помощью некоторого find replace для дезинфекции данных перед импортом.

ответ

19

Одним из способов может быть использование разделителей регулярных выражений, разрешенных движком python. Например:

>>> !cat castle.dat 
c stuff 
c more header 
c begin data   
1 1:.5 
1 2:6.5 
1 3:5.3 
>>> df = pd.read_csv('castle.dat', skiprows=3, names=['a', 'b', 'c'], 
        sep=' |:', engine='python') 
>>> df 
    a b c 
0 1 1 0.5 
1 1 2 6.5 
2 1 3 5.3 
+0

Это похоже на то, что мне нужно. Спасибо – CastleH

+0

Я чувствую себя немного неловко, не замечая аргумента «sep» в документах сейчас ...: -/ – CastleH

+0

Почему я получаю 'ParserError', когда я использую этот метод? 'pandas.errors.ParserError: ожидалось 29 полей в строке 11, видел 45. Возможно, ошибка связана с тем, что кавычки игнорируются при использовании разделителя с несколькими символами.' – user77005

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