2017-05-06 1 views

답변

2

빠르고 쉬운 대답은

df.T.set_index(3).T 
+1

좋은 해결책! – MaxU

+0

멋지고 우아한! – Allen

1

나는 당신이 df에서 locdrop이 행이 선택 행을 필요가 있다고 생각 :

df = pd.DataFrame({'A':['Groups'], 'B':['Quantity'], 'C':['Net Sales']}, index=[3]) 

df.columns = df.loc[3] 
df = df.drop(3) 

print (df) 
Empty DataFrame 
Columns: [Groups, Quantity, Net Sales] 
Index: [] 

그러나 더 나은 예를 들어, 그것을 피할입니다 에 대한 사용 read_csvDataFrame을받을 경우, 주요 장점은 매개 변수 skiprows를 사용 read_csv 모든 컬럼의 권리 dtypes를 얻을 :

import pandas as pd 
from pandas.compat import StringIO 

temp=u"""A,B,C 
D,E,F 
G,H,I 
J,K,L 
Groups Quantity,Net,Sales 
4,6,4""" 
#after testing replace 'StringIO(temp)' to 'filename.csv' 
df = pd.read_csv(StringIO(temp)) 
print (df) 
       A B  C 
0    D E  F 
1    G H  I 
2    J K  L 
3 Groups Quantity Net Sales 
4    4 6  4 

df = pd.read_csv(StringIO(temp), skiprows=4) 
print (df) 
    Groups Quantity Net Sales 
0    4 6  4 

타이밍 :

In [319]: %timeit (df.T.set_index(3).T.reset_index(drop=True).astype(float).rename_axis(None, 1)) 
10 loops, best of 3: 43.1 ms per loop 

In [320]: %timeit (jez(df)) 
10 loops, best of 3: 23.7 ms per loop 

In [321]: %timeit (jez1(df)) 
100 loops, best of 3: 13.6 ms per loop 

코드 타이밍을 위해 : 또한

모든 데이터가 문자열이면 모든 솔루션에 float으로 변환됩니다. 그럴 필요는 없습니다.

np.random.seed(100) 
df = pd.DataFrame(np.random.random((100000,3)), columns=list('ABC')) 
df = df.drop([0,1,2]) 
df.loc[3] = ['Groups', 'Quantity', 'Net Sales'] 
print (df) 

print (df.T.set_index(3).T.reset_index(drop=True).astype(float).rename_axis(None, 1)) 

def jez(df): 
    df.columns = df.loc[3] 
    return df.drop(3).reset_index(drop=True).astype(float).rename_axis(None, 1) 

def jez1(df): 
    arr = df.values 
    #get position (number of row) with 3 
    idx = df.index.get_loc(3) 
    return pd.DataFrame(np.delete(arr, (idx), axis=0).astype(float), columns=arr[idx]) 
관련 문제