2016-10-24 3 views
1

두 가지 문제가 있으며 둘 다 날짜 형식으로 출시됩니다.scatter 및 LinearRegression의 날짜 문제

내가 날짜와 값이 CVS 있습니다

2012-01-03 00:00:00  95812  
2012-01-04 00:00:00 101265 
... 
2016-10-21 00:00:00  93594 

을 내가 read_csv 내가 가진 날짜를 구문 분석을 시도하고 그것을로드 후 :

X.Dated = pd.to_datetime(X.Dated, format='%Y-%m-%d %H:%M:%S', errors='raise') 

나는 또한 시도했다 :

dateparse = lambda x: pd.datetime.strptime(x, '%Y-%m-%d %H:%M:%S') 
X = pd.read_csv('sales.csv', parse_dates=['Dated'], date_parser=dateparse) 

infer_datetime_format 인수

날짜를 인쇄 할 때 모두 2012-01-03처럼 보이기 때문에이 모든 것이 제대로 작동하는 것 같습니다. 내가 선형 회귀와 함께 사용하려고 할 때 또한

TypeError: invalid type promotion 

:

문제는 내가 차트에 데이터를 그릴려고 할 때 나타나는,이 라인 :

ax.scatter(X.Dated, X.Val, c='green', marker='.') 

나에게 오류를 제공합니다() 알고리즘 fit 명령 은 잘 작동하지만 스코어와 예측이 나에게이 오류를 준다 :

많은 문제를 해결하기 위해 노력했지만 운이 없었습니다. 도움이 될 것입니다. DTYPE datetime64[ns] (예 X['Dated'].values)의

답변

5

ax.scatter (순간) 팬더 시리즈를 허용하지 않습니다, 그러나 그것은 팬더 타임 스탬프의 목록을 받아 들일 수있다 (예를 들어 X['Dated'].tolist()), 또는 NumPy와 배열 :

import pandas as pd 
import matplotlib.pyplot as plt 

X = pd.DataFrame({'Dated': [pd.Timestamp('2012-01-03 00:00:00'), 
          pd.Timestamp('2012-01-04 00:00:00'), 
          pd.Timestamp('2016-10-21 00:00:00')], 
        'Val': [95812, 101265, 93594]}) 

fig, ax = plt.subplots() 
# ax.scatter(X['Dated'].tolist(), X['Val'], c='green', marker='.', s=200) 
ax.scatter(X['Dated'].values, X['Val'], c='green', marker='.', s=200) 
plt.show() 

enter image description here


Under the hood, the ax.scatter method calls

x = self.convert_xunits(x) 
y = self.convert_yunits(y) 

은 날짜와 유사한 입력을 처리합니다. convert_xunits은 NumPy datetime64 배열을 Matplotlib datenum으로 변환하지만, Pandas 시계열을 NumPy datetime64 배열로 변환합니다.

offsets = np.dstack((x, y)) 

np.dstack 시도가 하나의 공통 DTYPE에 그 입력의 dtypes을 촉진하려면 다음 팬더 시계열이 ax.scatter 입력으로 전달 될 때

따라서, 코드 때 this line is reached 실패 끝난다. x는 DTYPE datetime64[ns]을 가지고 있으며, y 모두와 호환되는 네이티브 NumPy와의 DTYPE이 없기 때문에

TypeError: invalid type promotion 

가 발생 후, DTYPE float64이있는 경우.

+0

덕분에 도움이되었습니다. 지금 그래프에 표시 할 수 있습니다. 그것은 내 질문의 첫 부분에 답합니다.다른 오류가있는 이유를 아십니까? '안전'규칙에 따라 dtype (' Greg

+0

@Greg : 오류의 출처에 대한 약간의 설명을 추가했습니다. 궁극적으로 TypeError는 np.dstack이 x 및 y 입력을 단일 배열 (공통 dtype 포함)로 결합하려고 시도 할 때 발생합니다. 'datetime64 [ns]'와'float' dtypes에는 호환 가능한 공통 dtype이 없으므로 TypeError가 발생합니다. – unutbu