2014-11-07 7 views
2

여러 값이있는 항목을 포함하는 열의 하위 집합이 필요한 데이터 프레임이 있습니다.팬더 데이터 프레임에 목록을 사용하는 방법은 무엇입니까?

condition  runtimes 
0   a  [1, 1.5, 2] 
1   b [0.5, 0.75, 1] 

가 어떻게이 dataframe 작업과 팬더를 얻을 수 있습니다 : 이것은 dataframe하게

df = [{"condition": "a", "runtimes": [1,1.5,2]}, {"condition": "b", "runtimes": [0.5,0.75,1]}] 
df = pandas.DataFrame(df) 

: 아래 dataframe는 다양한 조건에서 프로그램의 런타임이있는 "런타임"열 함께 숫자 목록으로 그 값을 다루는가? 예를 들어 행의 '런타임'열의 평균을 계산 하시겠습니까? 같은 목록 곳 "Could not convert [1, 1.5, 2, 0.5, 0.75, 1] to numeric"

그것을 CSV 파일로 직렬화이 dataframes 함께 작업하는 것이 유용 할 것입니다 : [1, 1.5, 2]이 너무 "1,1.5,2"로 변환됩니다 여전히 단일 있다는

df["runtimes"].mean() 

오류를 제공합니다 항목을 csv 파일에 저장하십시오.

답변

7

느낀다 당신이 팬더는 그렇지 않은 뭔가 만들려고 노력하는 것처럼. 항상 3 개의 런타임이있는 경우 3 개의 열을 만들 수 있습니다. 여기 개념은 유지

print df.groupby('condition').mean() 


      runtime trial 
condition     
a    1.50  2 
b    0.75  2 

다음

df = [{"condition": "a", "trial": 1, "runtime": 1}, 
     {"condition": "a", "trial": 2, "runtime": 1.5}, 
     {"condition": "a", "trial": 3, "runtime": 2}, 
     {"condition": "b", "trial": 1, "runtime": .5}, 
     {"condition": "b", "trial": 2, "runtime": .75}, 
     {"condition": "b", "trial": 3, "runtime": 1}] 
df = pd.DataFrame(df) 

입니다 수 있습니다

그러나 더 팬더 - esqe 접근 방식은 다음과 같이에 (상관없이 당신이 얼마나 많은 다른 실험) 데이터를 정상화하지 않는 것입니다 데이터는 테이블 형식이며 셀당 하나의 값입니다. 중첩 된 목록 기능을 수행하려면 Pandas 데이터 프레임이 아닌 목록을 사용해야합니다.

3

팬더가 시리즈의 모든 목록을 추가하고 행 수로 나누는 것처럼 보입니다. 결과로 목록 연결이 발생하고 결과가 숫자 형식 검사에 실패합니다. 오류 목록에 설명되어 있습니다.

당신은이 같은 평균을 계산할 수 :

df['runtimes'].apply(numpy.mean) 

을 빼고는에서 판다는 값으로 목록 작업을 좋아하지 않는다. 데이터가 표 형식 인 경우 목록을 세 개의 별도 열로 나누는 것을 고려하십시오.

열을 직렬화하는 것은 비슷한 방식으로 작동합니다 :

df['runtimes'].apply(lambda x: '"' + str(x)[1:-1] + '"') 
관련 문제