Попытка прочитать txt в dataframe с помощью '|' как разделитель, но pd продолжает пропускать строки - PullRequest
0 голосов
/ 02 апреля 2019

Я пытаюсь импортировать грязный текстовый файл (отформатированный из необработанного вывода html scrapper) в pd dataframe, для лучшей ориентации и дальнейшей обработки.Файл содержит '|'в качестве разделителей между значениями в одном столбце, и я не могу понять, где моя ошибка, так как в каждом столбце должно быть четыре поля, в зависимости от количества включенных разделителей.

Здесь приводится пара строк текстового файла,где каждый из '|'выступает в качестве разделителя для названия компании, адреса, типа и деятельности.Я попытался заменить разделитель другим символом или установить условие регулярного выражения в случае '|'является каким-то специальным символом, но безрезультатно.

'3sun Group' '|'
 '3 Sun House Boundary Road, Southtown, Great Yarmouth, Norfolk, NR31 0FB'
 '|' 'Private limited Company' '|' '71129 - Other engineering activities'
'Abacus' '|'
 '100 Cedarwood Crockford Lane, Chineham Business Park, Chineham, Basingstoke, Hampshire, England, RG24 8WD'
 '|' 'Private limited Company' '|'
 '66220 - Activities of insurance agents and brokers'
'Accsys Group' '|'
 'Lea Cottage Old Harrowden Road, Harrowden, Bedford, United Kingdom, MK42 0TB'
 '|' '27 November 2018' '|'
 '72110 - Research and experimental development on biotechnology'
'Acro' '|' '291 Green Lanes, London, England, N13 4XS' '|'
 'Private limited Company' '|' '46410 - Wholesale of textiles'
df = pd.read_csv('creg.txt', sep='|', names=["Company", "Address", "Type", "Industry"])

print (df)

Ожидаемый результат - это фрейм данных, содержащий следующие записи:

Company
'3sun Group' '
Address 
'
 '3 Sun House Boundary Road, Southtown, Great Yarmouth, Norfolk, NR31 0FB'
 '
Type
' 'Private limited Company' 
Industry
' '71129 - Other engineering activities'

Текущие результаты выглядят так:

                                          Company  \
0                                       '3sun Group' '   
1     '3 Sun House Boundary Road, Southtown, Great ...   
2                                                    '   
3                                           'Abacus' '   
4     '100 Cedarwood Crockford Lane, Chineham Busin...   
5                                                    '   
6     '66220 - Activities of insurance agents and b...   
7                                     'Accsys Group' '   
8     'Lea Cottage Old Harrowden Road, Harrowden, B...   
9                                                    '   
  Address  \
0                                                    '   
1                                                  NaN   
2                        ' 'Private limited Company' '   
3                                                    '   
4                                                  NaN   
5                        ' 'Private limited Company' '   
6                                                  NaN   
    Type Industry  
0                                         NaN      NaN  
1                                         NaN      NaN  
2    ' '71129 - Other engineering activities'      NaN  
3                                         NaN      NaN  
4                                         NaN      NaN  
5                                           '      NaN  
6                                         NaN      NaN

1 Ответ

1 голос
/ 02 апреля 2019

Вы можете использовать re.sub(), чтобы выполнить некоторую предварительную очистку вашего файла .txt, а затем использовать io.StringIO(), чтобы передать эту строку в pd.read_csv() в качестве конструктора для вашего фрейма данных:

import pandas as pd
import re, io

with open('test.txt', 'r') as f:
    text = re.sub(r'\s+\|\s+', ';', re.sub(r'\'', '', f.read()))

df = pd.read_csv(io.StringIO(text), sep=r';', names=["Company", "Address", "Type", "Industry"], engine='python')

Выходы:

        Company                                            Address  \
0    3sun Group  3 Sun House Boundary Road, Southtown, Great Ya...   
1        Abacus  100 Cedarwood Crockford Lane, Chineham Busines...   
2  Accsys Group  Lea Cottage Old Harrowden Road, Harrowden, Bed...   
3          Acro          291 Green Lanes, London, England, N13 4XS   

                      Type                                           Industry  
0  Private limited Company               71129 - Other engineering activities  
1  Private limited Company  66220 - Activities of insurance agents and bro...  
2         27 November 2018  72110 - Research and experimental development ...  
3  Private limited Company                      46410 - Wholesale of textiles 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...