#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. Помогло ли это решить вашу проблему и ответить на ваши сомнения?