2014-11-28 6 views
1

DataFrame 생성자를 사용하여 pandas DataFrame 객체를 만듭니다. 내 데이터는 목록 및 범주 형 데이터 시리즈 개체를 나타냅니다. 생성자에 인덱스를 전달하면 내 범주 데이터 시리즈가 NaN 값으로 재설정됩니다. 무슨 일 이니? 미리 감사드립니다!Pandas DataFrame 생성자가 인덱스 인수를 포함 할 때 NaN을 도입합니다.

예 :

import pandas as pd 
import numpy as np 
a = pd.Series(['a','b','c'],dtype="category") 
b = pd.Series(['a','b','c'],dtype="object") 
c = pd.Series(['a','b','cc'],dtype="object") 

A = pd.DataFrame({'A':a,'B':[1,2,3]},index=["0","1","2"]) 
AA = pd.DataFrame({'A':a,'B':[1,2,3]}) 
B = pd.DataFrame({'A':b,'C':[4,5,6]})  

print("DF A:") 
print(A) 
print("\nDF A, without specifying an index in the constructor:") 
print(AA) 
print("\nDF B:") 
print(B) 
+1

다른 사람들은이 문제에 대해 명시 적으로 설명합니다. "... 따라서 시리즈에 더하여 특정 색인은 pa와 일치하지 않는 모든 데이터를 버립니다. ssed 인덱스. ... "보낸 사람 : http://pandas.pydata.org/pandas-docs/stable/dsintro.html#dataframe –

답변

2

이 객체 대 범주와는 아무 상관이없는, 그것은 인덱스 정렬과 관련이있다.

당신은 생성자에게 3 개의 문자열 색인을 원하기 때문에 NaN이 A로 표시됩니다. 그러나 a은 정수 [0, 1, 2]으로 구성된 자체 색인을 가지고 있습니다. 원하는 인덱스와 일치하지 않으므로 데이터가 정렬되지 않으므로 원하는 인덱스가있는 DataFrame을 가져오고 NaN은 데이터가 누락되었음을 강조 표시합니다. 반대로 B은 단순한 목록이므로 무시할 색인이 없으므로 색인에 적합한 순서로 데이터가 제공된다고 가정합니다.

설명하는 것보다보기가 쉽습니다. 인덱스가 일치하지 않는 경우에 관계없이 DTYPE의, 당신이 NaN을 얻을 :

In [147]: pd.DataFrame({'A':pd.Series(list("abc"), dtype="category"),'B':[1,2,3]}, 
      index=["0","1","2"]) 
Out[147]: 
    A B 
0 NaN 1 
1 NaN 2 
2 NaN 3 

In [148]: pd.DataFrame({'A':pd.Series(list("abc"), dtype="object"),'B':[1,2,3]}, 
      index=["0","1","2"]) 
Out[148]: 
    A B 
0 NaN 1 
1 NaN 2 
2 NaN 3 

당신이 완벽하게 일치하는 인덱스를 사용하는 경우, 그것은 작동 :

In [149]: pd.DataFrame({'A':pd.Series(list("abc"), dtype="object"),'B':[1,2,3]}, 
      index=[0,1,2]) 
Out[149]: 
    A B 
0 a 1 
1 b 2 
2 c 3 

을 그리고 당신은 부분적으로 일치를 사용하는 경우 인덱스를 사용하면 인덱스가 정렬되는 위치의 값과 그렇지 않은 위치의 값을 얻을 수 있습니다.

In [150]: pd.DataFrame({'A':pd.Series(list("abc"), dtype="object"),'B':[1,2,3]}, 
      index=[0,1,10]) 
Out[150]: 
     A B 
0  a 1 
1  b 2 
10 NaN 3 
관련 문제