내가 작업해야하는 데이터는 약간 지저분합니다. 데이터 내부에 헤더 이름이 있습니다. 기존 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])
답변
데이터 프레임을 다시 만드는 것이 더 쉬울 것입니다. 이것은 또한 열 유형을 처음부터 해석합니다.
headers = df.iloc[0]
new_df = pd.DataFrame(df.values[1:], columns=headers)
답변
을 나타내는 매개 변수를 통해 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
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