Как прочитать пользовательскую таблицу в pandas, которая имеет номер строки номер номер? - PullRequest
2 голосов
/ 09 апреля 2020

Я пытался прочитать пользовательскую таблицу в pandas, но получаю ошибки в течение длительного времени.

Вот схема таблицы:

Number string number number

  • между двумя словами есть только один пробел
  • слово является числом или просто английским sh словом
  • нет NANS

имя файла: station.tsv

794 Kissee Mills MO 140 73 
824 Loma Mar CA 49 131 
603 Sandy Hook CT 72 148 
478 Tipton IN 34 98 
619 Arlington CO 75 93 
711 Turner AR 50 101 
839 Slidell LA 85 152 
411 Negreet LA 99 105 
588 Glencoe KY 46 136 
665 Chelsea IA 99 60
957 South El Monte CA 74 80


Note that the row `957 South El Monte CA 74 80` is  
actually 33rd row for my data.
If it was only 11th row, 
pandas gives no error, 
but if it is large nth row it gives error.

Моя попытка

df = pd.read_csv('station.tsv', header=None, sep=' ')

ParserError: Error tokenizing data. 
C error: Expected 7 fields in line 33, saw 8

Вопрос

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

regexp = r'(\d+)\s+(\w+)\s+(\d+)\s+(\d+)'

Чтобы прочитать текстовые данные и создать из них массив.

Я ожидаю использовать для этого NUMPY, PANDAS или любую другую python библиотеку.

1 Ответ

4 голосов
/ 09 апреля 2020

Вы можете указать разделитель, который является пробелом, которому не предшествует буква (?<![a-zA-Z])\s, или | пробел, за которым следует число \s(?=\d).

sep = r'(?<![a-zA-Z])\s|\s(?=\d)'
df = pd.read_csv('station.tsv', engine='python', sep=sep, header=None)

      0                  1    2    3
0   794    Kissee Mills MO  140   73
1   824        Loma Mar CA   49  131
2   603      Sandy Hook CT   72  148
3   478          Tipton IN   34   98
4   619       Arlington CO   75   93
5   711          Turner AR   50  101
6   839         Slidell LA   85  152
7   411         Negreet LA   99  105
8   588         Glencoe KY   46  136
9   665         Chelsea IA   99   60
10  957  South El Monte CA   74   80

df.dtypes
#0     int64
#1    object
#2     int64
#3     int64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...