2013-07-08 5 views
1

다음과 같은 문제가 있습니다. 정수 열 이름과 기간 인덱스를 사용하여 DataFrame을 생성했습니다. 이제 다음 함수를 사용하여 열의 이름을 바꾼 경우 df.rename (columns = lambda x : str (x), inplace = True)문자열 열 이름이있는 DataFrame

따라서 열의 유형을 다음과 같이 변환합니다. 이상한 행동 : 작업 전에 프레임에서 한 열을 검색하면 시리즈가 있습니다. 이제 일부 열에서 DataFrame을 얻습니다. 이전에 df.loc [:, 1]이 시리즈를 제공했습니다.

이제 df.loc [:, '1']은 PeriodIndex 길이가 0 인 DataFrame을 제공하고 df의 전체 원본 열.

누군가 내가 잘못된 것을하고 있는지 또는 버그를 걸러 냈는지 생각하는 사람이 있습니까? 여기

버그를 재현 코드 조각입니다 (?) :
A = pd.DataFrame(dict(zip(range(0,9000), [pd.Series([1,2,3], [pd.Period(1), pd.Period(2), pd.Period(3)]) for x in range(0,9000)]))) 

A[5000] 
A.rename(columns = lambda x: str(x), inplace=True) 

A['5000'] # This should return a DataFrame with a zero-PeriodIndex and the full columns! 

사전에 대단히 감사와 안부 마크

답변

1

이 마스터입니다. 올바른 것으로 보입니다

In [11]: A = pd.DataFrame(dict(zip(range(0,9000), [pd.Series([1,2,3], [pd.Period(1), pd.Period(2), pd.Period(3)]) for x in range(0,9000)]))) 

In [12]: A['5000'] 
Out[12]: 
<class 'pandas.core.frame.DataFrame'> 
PeriodIndex: 0 entries 
Columns: 9000 entries, 0 to 8999 
dtypes: int64(9000) 

In [13]: A[5000] 
Out[13]: 
1-01-01 1 
1-01-02 2 
1-01-03 3 
Freq: D, Name: 5000, dtype: int64 

In [14]: A.rename(columns = lambda x: str(x), inplace=True) 

In [15]: A['5000'] 
Out[15]: 
1-01-01 1 
1-01-02 2 
1-01-03 3 
Freq: D, Name: 5000, dtype: int64 

In [16]: A[5000] 
KeyError: u'no item named 5000' 
+0

이상합니다. 파이썬 2.7.3과 팬더 0.11.0을 사용하고 있습니다. 어떤 버전을 사용하고 있습니까? 더 자세히 문제를 조사했습니다. 이상한 동작은 인덱스 32/'32 '부터 시작합니다 ... "PeriodIndex 길이가 0 인 DataFrame과 df의 원본 전체 열을 제공합니다.": A [ '5000'] 아웃 [5] : <클래스 'pandas.core.frame.DataFrame'> PeriodIndex : 0 항목 열 9000 명 엔트리 0으로 dtypes 8999 : INT64 (9000) – McRip

+0

이것은 주인님 (0.12)입니다 ... 이번 주에 올 때 .... 0.11은 다릅니다; 나는 이것에 대한 약간의 고침을 기억하는 것 같다. (검사의 순서와 관련하여) ... – Jeff

+0

https://github.com/pydata/pandas/issues/3594는 관련있다 – Jeff

관련 문제