머리글을 맨 위 행으로 바꾸기
현재 다음과 같은 데이터 프레임이 있습니다.
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)
하지만 진전이 없는 것 같아요
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
데이터 프레임은 다음 작업을 수행하여 변경할 수 있습니다.
df.columns = df.iloc[0]
df = df[1:]
그리고나서
df.to_csv(path, index=False)
요령을 터득해야 합니다.
원라이너를 원하는 경우 다음을 수행할 수 있습니다.
df.rename(columns=df.iloc[0]).drop(df.index[0])
파이썬 스와핑을 사용하는 또 다른 원라이너:
df, df.columns = df[1:] , df.iloc[0]
인덱스를 재설정하지 않습니다.
하지만 그 반대는 예상대로 되지 않을 것입니다.df.columns, df = df.iloc[0], df[1:]
@ostrokach 답변이 가장 좋습니다.대부분의 경우 데이터 프레임에 대한 참조를 통해 데이터 프레임을 유지하기를 원하기 때문에 = True의 이점을 얻을 수 있습니다.
df.rename(columns=df.iloc[0], inplace = True) df.drop([0], inplace = True)
열 인덱스를 "제자리"로 정의하는 간단한 트릭이 있습니다.왜냐면set_index
행 인덱스를 설정합니다. 데이터 프레임을 전환하고 인덱스를 설정한 다음 다시 전환하여 열에 대해 동일한 작업을 수행할 수 있습니다.
df = df.T.set_index(0).T
다음을 변경해야 할 수도 있습니다.0
에set_index(0)
행에 이미 다른 인덱스가 있는 경우.
대신에, 우리는 판다와 함께 파일을 읽을 때 이것을 할 수 있습니다.
우리가 사용할 수 있는 이 사건은
pd.read_csv('file_path',skiprows=1)
파일을 읽을 때 첫 번째 행을 건너뛰고 열을 파일의 두 번째 행으로 설정합니다.
어떤 이유에서인지, 저는 이렇게 해야만 했습니다.
df.columns = [*df.iloc[0]]
df = table[1:]
목록을 목록으로 분할하는 부분은 중복된 것처럼 보이지만 그렇지 않으면 헤더는 여전히 실제 테이블의 일부로 나타납니다.
--이것을 하는 다른 방법.
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
괜찮으시다면 화살을 쏘세요.감사해요.
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
이 작업은 두 번 이상 필요할 수 있습니다.저는 rgalbo의 답변을 받아 어떤 프로젝트에도 들어올려 넣을 수 있는 간단한 기능을 작성했습니다.
def promote_df_headers(df):
'''
Takes a df and uses the first row as the header
Parameters
----------
df : DataFrame
Any df with one or more columns.
Returns
-------
df : DataFrame
Input df with the first row removed and used as the column names.
'''
new_header = df.iloc[0]
df = df[1:]
df.columns = new_header
df = df.reset_index(drop=True)
return df
모범 사례 및 베스트 원 라이너:
df.to_csv(newformat,header=1)
헤더 값을 확인합니다.
헤더는 열 이름으로 사용할 행 번호를 참조합니다.행 번호는 df가 아니라 excel 파일(0은 첫 번째 행, 1은 두 번째 행 등)입니다.
이렇게 하면 원하는 열 이름을 얻을 수 있으며 추가 코드를 작성하거나 새 df를 작성할 필요가 없습니다.
좋은 점은, 교체된 행을 삭제한다는 것입니다.
언급URL : https://stackoverflow.com/questions/31328861/replacing-header-with-top-row
'sourcetip' 카테고리의 다른 글
Android에서 전체 화면 활동? (0) | 2023.06.17 |
---|---|
데이터 프레임의 선택한 열에 NA(누락) 값이 포함된 행의 부분 집합 (0) | 2023.06.17 |
R에서 %>% 함수는 무엇을 의미합니까? (0) | 2023.06.17 |
루비 코드를 어떻게 문서화합니까? (0) | 2023.06.17 |
벡터의 마지막 값에 액세스하는 방법은 무엇입니까? (0) | 2023.06.17 |