Как добавить строку заголовка в 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?
Ответы
Ответ 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?
Есть два случая для рассмотрения:
- DataFrame не имеет заголовков или
- 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