prosource

Pandas DataFrame에 대한 행을 열 헤더로 변환합니다.

probook 2023. 7. 2. 20:50
반응형

Pandas DataFrame에 대한 행을 열 헤더로 변환합니다.

제가 작업해야 할 데이터가 좀 지저분합니다.데이터 내부에 헤더 이름이 있습니다.기존 판다 데이터 프레임에서 행을 선택하고 열 헤더로 변경(이름 변경)하려면 어떻게 해야 합니까?

다음과 같은 작업을 수행하고 싶습니다.

header = df[df['old_header_name1'] == 'new_header_name1']

df.columns = header
In [21]: df = pd.DataFrame([(1,2,3), ('foo','bar','baz'), (4,5,6)])

In [22]: df
Out[22]: 
     0    1    2
0    1    2    3
1  foo  bar  baz
2    4    5    6

열 레이블을 두 번째 행(색인 위치 1)의 값과 동일하게 설정합니다.

In [23]: df.columns = df.iloc[1]

인덱스에 고유한 레이블이 있는 경우 다음을 사용하여 두 번째 행을 삭제할 수 있습니다.

In [24]: df.drop(df.index[1])
Out[24]: 
1 foo bar baz
0   1   2   3
2   4   5   6

인덱스가 고유하지 않은 경우 다음을 사용할 수 있습니다.

In [133]: df.iloc[pd.RangeIndex(len(df)).drop(1)]
Out[133]: 
1 foo bar baz
0   1   2   3
2   4   5   6

사용.df.drop(df.index[1])두 번째 행과 레이블이 같은 모든 행을 제거합니다.고유하지 않은 인덱스는 이러한 장애물(또는 잠재적인 버그)을 초래할 수 있으므로 인덱스가 고유한지 주의하는 것이 좋습니다(판다가 필요하지 않더라도).

이것은 작동합니다(pandas v'0.19).2'):

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

데이터 프레임을 다시 만드는 것이 더 쉬울 것입니다.이렇게 하면 열 유형을 처음부터 해석할 수도 있습니다.

headers = df.iloc[0]
new_df  = pd.DataFrame(df.values[1:], columns=headers)

df를 재할당하지 않고 헤더의 이름을 변경하는 방법

df.rename(columns=df.iloc[0], inplace = True)

df를 재할당하지 않고 행을 삭제하는 방법

df.drop(df.index[0], inplace = True)

를 나타내는 매개 변수를 통해 read_csv 또는 read_html 생성자에서 행 인덱스를 지정할 수 있습니다.이렇게 하면 정크 행으로 추정되는 모든 이전 행을 자동으로 삭제할 수 있습니다.

import pandas as pd
from io import StringIO

In[1]
    csv = '''junk1, junk2, junk3, junk4, junk5
    junk1, junk2, junk3, junk4, junk5
    pears, apples, lemons, plums, other
    40, 50, 61, 72, 85
    '''

    df = pd.read_csv(StringIO(csv), header=2)
    print(df)

Out[1]
       pears   apples   lemons   plums   other
    0     40       50       61      72      85

단순성 유지 Python

데이터 프레임의 Padas 기능columns속성 표준 파이썬과 함께 사용하면 무엇을 하고 있는지 훨씬 명확합니다.

table = [['name', 'Rf', 'Rg', 'Rf,skin', 'CRI'],
 ['testsala.cxf', '86', '95', '92', '87'],
 ['testsala.cxf: 727037 lm', '86', '95', '92', '87'],
 ['630.cxf', '18', '8', '11', '18'],
 ['Huawei stk-lx1.cxf', '86', '96', '88', '83'],
 ['dedo uv no filtro.cxf', '52', '93', '48', '58']]

import pandas as pd
data = pd.DataFrame(table[1:],columns=table[0])

또는 예를 들어 첫 번째 행이 아니라 10번째 행인 경우:

columns = table.pop(10)
data = pd.DataFrame(table,columns=columns)

언급URL : https://stackoverflow.com/questions/26147180/convert-row-to-column-header-for-pandas-dataframe

반응형