Как добавить строку заголовка в панде DataFrame

166

Я читаю CSV-файл в pandas. Этот CSV-файл состоит из четырех столбцов и нескольких строк, но не имеет строки заголовка, которую я хочу добавить. Я пробовал следующее:

Cov = pd.read_csv("path/to/file.txt", sep='\t')
Frame=pd.DataFrame([Cov], columns = ["Sequence", "Start", "End", "Coverage"])
Frame.to_csv("path/to/file.txt", sep='\t')

Но когда я применяю код, я получаю следующую ошибку:

ValueError: Shape of passed values is (1, 1), indices imply (4, 1)

Что именно означает ошибка? И что было бы чистым способом в Python, чтобы добавить строку заголовка в мой CSV-файл / Pandas DF?

sequence_hard
источник
Вот другая интерпретация вашего вопроса: Добавьте еще один заголовок к существующему Dataframe, чтобы создать MultiIndex.
cs95

Ответы:

257

Вы можете использовать namesнепосредственно вread_csv

names: как в массиве, по умолчанию None Список имен столбцов для использования. Если файл не содержит строку заголовка, то вы должны явно передать header = None

Cov = pd.read_csv("path/to/file.txt", 
                  sep='\t', 
                  names=["Sequence", "Start", "End", "Coverage"])
Леб
источник
9
Вы будете смеяться. Я действительно пытался это сделать, но не знал, что вы должны поставить квадратные скобки вокруг имен. Что логически в ретроспективе. Спасибо!
sequence_hard
Не беспокойтесь, мы все сделали эти глупые ошибки. Я тоже виноват в них.
Леб
@Leb, у меня была точно такая же проблема, и я попробовал ваше решение. Я получил заголовки для таблицы, но первая строка также была заменена теми же именами заголовков. Что мне теперь делать?
007mrviper
это добавляет больше столбцов к моим данным, все с NaNатрибутами. Это потому, что мой разделитель - пустое место.
SalahAdDin
128

В качестве альтернативы вы можете прочитать csv header=Noneи затем добавить его df.columns:

Cov = pd.read_csv("path/to/file.txt", sep='\t', header=None)
Cov.columns = ["Sequence", "Start", "End", "Coverage"]
Антон Протопопов
источник
15
col_Names=["Sequence", "Start", "End", "Coverage"]
my_CSV_File= pd.read_csv("yourCSVFile.csv",names=col_Names)

сделав это, просто проверьте это с [ну, очевидно, я знаю, вы это знаете. Но все равно...

my_CSV_File.head()

Надеюсь, что это помогает ... Ура

Бхардвадж Джоши
источник
Пожалуйста, отформатируйте свой код с помощью {}кнопки. Отступы имеют значение.
Мистер Т
7

Чтобы исправить код , который можно просто изменить , [Cov]чтобы Cov.values, первый параметр pd.DataFrameбудет многомерный numpyмассив:

Cov = pd.read_csv("path/to/file.txt", sep='\t')
Frame=pd.DataFrame(Cov.values, columns = ["Sequence", "Start", "End", "Coverage"])
Frame.to_csv("path/to/file.txt", sep='\t')

Но самое умное решение - это использование pd.read_excelс header=Noneи names=columns_list.

romulomadu
источник
Когда мы даем column_list, можем ли мы добавить значения по умолчанию для выбранных столбцов?
Чинтан Готеча