2017-02-17 1 views
0

.mat 파일을 pandas DataFrame으로 변환하려고하지만 .mat 파일의 구조로 인해 해결이 어렵습니다. 현재 DataFrame은 다음과 같습니다.팬더 내에서 중첩 된 배열 제거 DataFrame

      A 
2008-01-02    [1] 
2008-01-03    [2] 
2008-01-04    [3] 
2008-01-07    [4] 
2008-01-08    [5] 

각 열에 포함 된 값이 자체 어레이에 포함 된 것처럼 보입니까? .dtype이 객체를 반환합니다. 결국 열을 집계하고 싶지만 숫자가 아니기 때문에 숫자 함수 호출을 수행 할 수 없습니다. DataFrame 구조를 유지하면서 배열 구조에서 값을 제거하는 방법에 대한 아이디어?

답변

0

apply 메서드를 사용하여 데이터 프레임의 열에 연산을 적용 할 수 있습니다.

어떤 종류의 object에 따라 function을 정의한 다음 apply 방법으로 전달해야합니다. 예를 들어 목록 인 경우 첫 번째 항목을 선택하고 문자열이면 숫자를 추출하고 변환 할 수 있습니다.

0

이 0의 인덱스 열을 제거하는 방법을 확실하지

df = pd.DataFrame(data) 
unnested_lst = [] 
for col in df.columns: 
    unnested_lst.append(df[col].apply(pd.Series).stack()) 
result = pd.concat(unnested_lst, axis=1, keys=df.columns) 
result 
          A 
2008-01-02  0   1 
2008-01-03  0   2 
2008-01-04  0   3 
2008-01-07  0   4 
2008-01-08  0   5 

을 작동하는 것 같군. 어떤 아이디어?

1

필자가 올바르게 이해하고 있다면 각 항목은 파이썬 목록에 포함 된 요소이므로 목록에서 요소를 가져 와서 각 항목이 스칼라가되게하려는 것입니다.

당신이 할 수있는 한 가지 방법은 df.applymap 기능입니다. 당신은 단지 일부 열에서 변환을 수행하려면, 대신 series.map을 사용할 수

df = df.applymap(lambda x: x[0]) # If same operation is to be used on all columns 

이 기능은 전체 dataframe에 작동합니다 :

for some columns: 
    df['column name'] = df['column name'].map(lambda x: x[0]) 

을 각각의 경우에, 당신은 할 수 있습니다 나중에 열의 dtype을 변경하여 작업 할 수 있습니다. 목록에서 단일 요소로 변경하면 열의 object dtype이 유지 될 수 있습니다. 이 경우 다음을 사용할 수 있습니다.

df['column name'] = df['column name'].astype([new type]) 
+0

이것은 내가 찾고있는 것입니다. 감사! –