Pandas DataFrame의 행을 열 헤더로 변환,
내가 작업해야하는 데이터는 약간 지저분합니다. 데이터 내부에 헤더 이름이 있습니다. 기존 pandas 데이터 프레임에서 행을 선택하고 열 머리글로 변경 (이름 변경)하려면 어떻게해야합니까?
다음과 같이하고 싶습니다.
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가 필요로하지 않더라도).
이것은 작동합니다 (pandas v'0.19.2 ') :
df.rename(columns=df.iloc[0])
을 나타내는 매개 변수를 통해 read_csv 또는 read_html 생성자 에서 행 인덱스를 지정할 수 있습니다 . 이것은 정크라고 생각되는 모든 선행 행을 자동으로 삭제하는 장점이 있습니다.header
Row number(s) to use as the column names, and the start of the data
import pandas as pd
from io import StringIO
In[1]
csv = '''junk1, junk2, junk3, junk4, junk5
junk1, junk2, junk3, junk4, junk5
35, 40, 25, 19, 33
40, 50, 61, 72, 85
'''
df = pd.read_csv(StringIO(csv), header=2)
print(df)
Out[1]
35 40 25 19 33
0 40 50 61 72 85
데이터 프레임을 다시 만드는 것이 더 쉬울 것입니다. 이것은 또한 열 유형을 처음부터 해석합니다.
headers = df.iloc[0]
new_df = pd.DataFrame(df.values[1:], columns=headers)
참고 URL : https://stackoverflow.com/questions/26147180/convert-row-to-column-header-for-pandas-dataframe
'Programing' 카테고리의 다른 글
sys.argv [x]가 정의되어 있는지 확인 (0) | 2020.10.07 |
---|---|
로드 된 모든 Spring Bean을 인쇄하십시오. (0) | 2020.10.07 |
일반 함수를 명시 적으로 전문화 할 수 없습니다. (0) | 2020.10.07 |
'DataFrame'개체에 'sort'속성이 없습니다. (0) | 2020.10.07 |
jquery-chosen 드롭 다운 비활성화 (0) | 2020.10.07 |