Подтвердить что ты не робот

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

Я читаю файл 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?

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

Ответ 3

col_Names=["Sequence", "Start", "End", "Coverage"]
my_CSV_File= pd.read_csv("yourCSVFile.csv",names=col_Names)

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

my_CSV_File.head()

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

Ответ 4

Чтобы исправить ваш код, вы можете просто изменить [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.

Ответ 5

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

Есть два случая для рассмотрения:

  1. DataFrame не имеет заголовков или
  2. DataFrame уже имеет заголовок, но вы хотели бы добавить к нему еще один уровень

Если у вас есть DataFrame без заголовков, и эти данные НЕ получены из CSV, просто присвойте .columns:

df.columns = ['x', 'y', 'z']

Если данные поступают из CSV/Excel, вы можете использовать атрибут names как описано здесь.

df = pd.read_csv('file.csv', header=None, names=['x', 'y', 'z'])

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

# Setup
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df

   A  B
0  1  4
1  2  5
2  3  6

new_level = ['C', 'D']
df.columns = [new_level, df.columns]
# Similar to,
# df.columns = pd.MultiIndex.from_arrays([new_level, df.columns])

df

   C  D
   A  B
0  1  4
1  2  5
2  3  6

df.columns
MultiIndex(levels=[['C', 'D'], ['A', 'B']],
           codes=[[0, 1], [0, 1]])

В качестве альтернативы, если вы хотите добавить один заголовок (скажем, "foo"), используйте вместо него from_product (это проще):

df.columns = pd.MultiIndex.from_product([['foo'], df.columns])
df

  foo   
    A  B
0   1  4
1   2  5
2   3  6

Обратите внимание, что при сохранении в CSV над каждым столбцом будет отображаться "foo":

df.to_csv('file.csv', index=False)
!cat file.csv

foo,foo
A,B
1,4
2,5
3,6