헤더를 맨 위 행으로 대체하는 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

파이썬 스와핑을 사용하는 또 다른 한 줄 :

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

모범 사례 및 Best OneLiner :

df.to_csv(newformat,header=1)

헤더 값을 확인하십시오.

헤더는 열 이름으로 사용할 행 번호를 참조합니다. 실수하지 마십시오. 행 번호는 df가 아니라 Excel 파일에서 가져온 것입니다 (0은 첫 번째 행, 1은 두 번째 등).

이렇게하면 원하는 열 이름을 얻을 수 있고 추가 코드를 작성하거나 새 df를 만들 필요가 없습니다.

좋은 점은 교체 된 행을 삭제한다는 것입니다.


이것은 단지 CSV를 출력하지만 데이터 프레임을 변경하지 않습니다.
AMC
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.