pd.read_table() не может прочитать мою первую строку и прочитать ее как имя или индекс столбца

#python #pandas

#питон #панды

Вопрос:

Я использую y_train_df = pd.read_table('y_train.txt') для чтения свой текстовый файл train, но его можно прочитать только так,

       5
0     5
1     5
2     5
3     5
4     5
...  ..
7762  2
7763  2
7764  2
7765  2
7766  2
 

затем я использую y_train_df = pd.read_table(base_datadir 'Train/y_train.txt', header=None, index_col=False) , чтобы сделать header=none и index_col=False , но он по-прежнему не может прочитать первую строку, первое значение 5 изменяется на 0 .

       0
0     5
1     5
2     5
3     5
4     5
...  ..
7762  2
7763  2
7764  2
7765  2
7766  2
 

Не знаю, как это произошло, может кто-нибудь помочь рассказать, что здесь пошло не так?

та же проблема для моего другого текстового файла: введите описание изображения здесь

вот как это делается y_train.txt выглядит как:

 5
5
5
5
5
5
5
5
5
...
2
2
2
2
2
 

Комментарии:

1. Не могли бы вы опубликовать фрагмент текста y_train.txt as, чтобы я мог точно настроить свой ответ?

2. да, я отредактировал, это массив [5, 5, 5, 5, 5, …, 2, 2 , 2], это метка активности в наборе данных HAPT.

3. Прохладный. Просто отредактировал мой ответ, чтобы объяснить это.

Ответ №1:

Как насчет чтения всех данных только в одном столбце, а затем обработки очистки данных?

 import io
import pandas as pd
import numpy as np

df_str = '''
      5 2
0     5 1
1     5 1
2     5 1
3     5 1
4     5 1
7762  2 1
7763  2 1
7764  2 1
7765  2 1
7766  2 3
'''

obj = pd.read_csv(io.StringIO(df_str.strip()), sep='n', header=None)[0]
objn = obj.str.split('s ')
objn.iloc[0].insert(0, '')
df = pd.DataFrame(objn.str[1:].tolist())

print(df)
 

вывод:

     0  1
0   5  2
1   5  1
2   5  1
3   5  1
4   5  1
5   5  1
6   2  1
7   2  1
8   2  1
9   2  1
10  2  3
 

Комментарии:

1. Возможно, я не слишком четко объясняю, что первое 5 — это часть данных, но оно было прочитано как имя столбца, я не хочу, чтобы это было имя столбца или индекс столбца.

2. @SuperEiskalt Я знаю, что вы имеете в виду, видите, необработанные данные содержат 11 строк, первая строка равна 5,2. Вы можете попробовать заменить io.StringIO(df_str.strip() на имя файла. Протестируйте его и найдите результат.

Ответ №2:

Итак, когда header=None передается, read_table функция игнорирует фактический первый столбец в качестве заголовка. Следовательно, он возвращает целые числа: 0, 1, 2, ... в качестве заголовков. Когда header=None не передается, первый столбец автоматически становится заголовком.


Опубликуйте редактирование: при header=None передаче возвращаемый фрейм данных будет содержать 7767 строк. Таким образом, заголовок становится списком целых 0,1,2,... чисел. Однако, когда header=None не передается, первые столбцы становятся заголовком, а количество строк в возвращаемом фрейме данных станет 7766 (и мы непреднамеренно потеряем первый столбец)

Для получения дополнительной информации вы можете ознакомиться с документацией здесь .

Комментарии:

1. как я могу это исправить? Я хочу получить результат 7767 строк…

2. Вам просто нужно добавить header=None . Таким образом, учитываются все записи 🙂

3. Помогло ли это решить вашу проблему и ответить на ваши сомнения?