Python Pandas Заміна заголовка на верхній рядок


83

На даний момент у мене є фрейм даних, який виглядає так:

           Unnamed: 1    Unnamed: 2   Unnamed: 3  Unnamed: 4
0   Sample Number  Group Number  Sample Name  Group Name
1             1.0           1.0          s_1         g_1
2             2.0           1.0          s_2         g_1
3             3.0           1.0          s_3         g_1
4             4.0           2.0          s_4         g_2

Я шукаю спосіб видалити рядок заголовка і зробити перший рядок новим рядком заголовка, тому новий фрейм даних буде виглядати так:

    Sample Number  Group Number  Sample Name  Group Name
0             1.0           1.0          s_1         g_1
1             2.0           1.0          s_2         g_1
2             3.0           1.0          s_3         g_1
3             4.0           2.0          s_4         g_2

Я пробував речі за лініями, if 'Unnamed' in df.columns:а потім створив фрейм даних без заголовка, df.to_csv(newformat,header=False,index=False)але, здається, нікуди не дійшов .

Відповіді:


152
new_header = df.iloc[0] #grab the first row for the header
df = df[1:] #take the data less the header row
df.columns = new_header #set the header row as the df header

46

Кадр даних можна змінити, просто виконавши

df.columns = df.iloc[0]
df = df[1:]

Тоді

df.to_csv(path, index=False) 

Повинен зробити трюк.


4
Це краща відповідь, оскільки в ньому немає зайвого коду (new_header).
— Ad Infinitum

34

Якщо ви хочете однокласний вкладиш, ви можете зробити:

df.rename(columns=df.iloc[0]).drop(df.index[0])

3

Відповідь @ostrokach найкраща. Швидше за все, ви хотіли б зберегти це протягом будь-яких посилань на фрейм даних, таким чином, виграли б від inplace = True.
df.rename(columns=df.iloc[0], inplace = True) df.drop([0], inplace = True)


2

Ось простий прийом, який визначає індекси стовпців "на місці". Оскільки set_indexвстановлює індекси рядків на місці, ми можемо зробити те саме для стовпців, транспонуючи фрейм даних, встановлюючи індекс і транспортуючи його назад:

df = df.T.set_index(0).T

Зверніть увагу, що, можливо, вам доведеться змінити 0in, set_index(0)якщо ваші рядки вже мають інший індекс.


2

Ще один вкладиш із використанням заміни Python:

df, df.columns = df[1:] , df.iloc[0]

Це не призведе до скидання індексу

Хоча навпаки не вийде, як очікувалося df.columns, df = df.iloc[0], df[1:]


0

--інший спосіб зробити це


df.columns = df.iloc[0]
df = df.reindex(df.index.drop(0)).reset_index(drop=True)
df.columns.name = None

    Sample Number  Group Number  Sample Name  Group Name
0             1.0           1.0          s_1         g_1
1             2.0           1.0          s_2         g_1
2             3.0           1.0          s_3         g_1
3             4.0           2.0          s_4         g_2

Якщо вам подобається, натисніть стрілку вгору. Дякую


0
header = table_df.iloc[0]
table_df.drop([0], axis =0, inplace=True)
table_df.reset_index(drop=True)
table_df.columns = header
table_df

Будь ласка, додайте пояснення
— vsync

0

Найкраща практика та найкращий OneLiner :

df.to_csv(newformat,header=1)

Зверніть увагу на значення заголовка:

Заголовок посилається на номери рядків, які використовуватимуться як назви стовпців. Не помиліться, номер рядка не df, а файл Excel (0 - перший рядок, 1 - другий тощо).

Таким чином, ви отримаєте потрібну назву стовпця, і вам не доведеться писати додаткові коди або створювати нові df.

Добре, що він скидає замінений рядок.


Це просто виводить CSV, хоча це не змінює фрейм даних, так?
— AMC
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.