2017-11-07 8 views
1

주어진 행의 SQL 열 값을 읽는 파이썬 코드 스 니펫이 있습니다. 아래의 스 니펫은 DataFrame 컨텍스트 내의 열을 반복하고 숫자 값을 배열에 추가합니다.Jupyter Pandas DataFrame - 열 값 읽기

각 열의 값을 출력하면 결과가 올바르게 표시됩니다. 그러나 최종 배열을 인쇄하면 이상한 형식 (메타 데이터)이 표시됩니다.

values = [] 
for i in range(len(columns)): 
     val = df[columns[i]];   
     values.append(val) 
     #print(values) // this prints out the correct numeric value. 

    #print(values) // but this prints out the array with the weird format. 

이상한/메타 데이터 출력은 다음과 같습니다

[0 0 
Name: colname1, dtype: int64, 0 8 
Name: colname2, dtype: int64, 0 0 
Name: colname3, dtype: int64, 0 0 
Name: colname4, dtype: int64, 0 0 
Name: colname5, dtype: int64, 0 0 
Name: colname6, dtype: int64, 0 0 
Name: colname7, dtype: int64, 0 0 
Name: colname8, dtype: int64, 0 0 
Name: colname9, dtype: int64, 0 0 
Name: colname10, dtype: int64, 0 1 
Name: colname11, dtype: int64, 0 0 
Name: colname12, dtype: int64] 

왜 내가 명확하게 숫자 값을 추가 할 때 모든 메타 데이터 물건을보고 있어요?

DataFrame은 pd.read_sql_query 호출을 통해 작성되었습니다.

+0

'values.append (val.tolist())'또는'values.append (목록 (발))'변환을위한'Series'가 나열합니다. – jezrael

+0

또는'df.values.T.tolist()'가 필요합니까? – jezrael

+1

jupyter- *는 관련없는 태그이므로 추가하지 마십시오. –

답변

2

난 당신이 list에, numpy array에 값을 변환 트랜스 및 변환 할 필요가 있다고 생각 : 필요 깨어나 slowier 솔루션을 변환하면

df = pd.DataFrame({ 
    'A': ['a','e','g'], 
    'B': list(range(3)) 
}) 
print (df) 
    A B 
0 a 0 
1 e 1 
2 g 2 

L = df.values.T.tolist() 
print (L) 
[['a', 'e', 'g'], [0, 1, 2]] 

Serieslist에 :

values = [] 
for i in range(len(columns)): 
     val = df[columns[i]];   
     values.append(val.tolist()) 

DataFrame 또는 필요 한 경우에만 df에서 행을 선택하십시오 Series에 대한 위치를 선택하고로 변환하려면 iloc을 사용하십시오.:

당신이 필요로하는
df = pd.DataFrame({ 
    'A': [0], 
    'B': [3], 
    'C' :[1] 
}) 
print (df) 
    A B C 
0 0 3 1 

L = df.values.T.tolist() 
print (L) 
[[0], [3], [1]] 

#select first row 
L1 = df.iloc[0].tolist() 
print (L1) 
[0, 3, 1] 

df = pd.DataFrame({ 
    'A': ['a','e','g'], 
    'B': list(range(3)) 
},index=list('def')) 
print (df) 
    A B 
d a 0 
e e 1 
f g 2 

#select by index name 
L1 = df.loc['f'].tolist() 
print (L1) 
['g', 2] 

#select by position of row 
L1 = df.iloc[2].tolist() 
print (L1) 
['g', 2] 
+0

이 방법으로 값을 추가 할 수 있습니까? 근본적으로 나의 df는 단지 1 행을 가지고있다. – AlvinfromDiaspar

+0

목록에 한 행의 DataFrame에 대한 솔루션을 추가합니다. – jezrael

+0

나는 df.iloc [0] .tolist()를 사용하여 올바른 값 (1 차원 배열)이라고 생각하는 것을 얻을 수있었습니다. 하지만 지금은이 오류를 받고 있는데, "ValueError : 모양이 일치하지 않습니다 : 객체를 단일 모양으로 브로드 캐스팅 할 수 없습니다." – AlvinfromDiaspar