2017-12-22 12 views
1

나는 numpy 및 pandas에 상당히 새로운 것이라고 말함으로써 시작하겠습니다. 나는 판다 데이터 프레임을 만들려고 노력하고 있지만 적절한 방법으로 일을하고 있는지 확신 할 수 없습니다.개체 목록에서 팬더 데이터 프레임 구성

필자가 설정 한 .Net 개체의 목록이 매우 커서 (그리고 제어 할 수있는 권한이 거의 없음) 팬더 데이터 프레임을 사용하여 시계열을 만들고 싶습니다. 데모 용으로 단순한 자리 표시 자 클래스로 .NET 클래스를 대체 한 예제가 있습니다. 이 코드의 listOfthings은 기본적으로 .Net에서 얻은 것으로 판다 데이터 프레임으로 변환하려고합니다.

내 질문은 :

  1. 내가 먼저 NumPy와 배열을 구성하여 dataframe을 구성. 필요한가? 또한,이 배열은 내가 예상 한대로 1000x2 크기가 아닙니다. 여기에 numpy를 사용하는 더 좋은 방법이 있습니까?
  2. datetime64 문자열을 캐스팅 할 수없는 것 때문에이 코드는 작동하지 않습니다. 이것은 문자열이 ISO 형식이기 때문에 나 혼란스럽고 다음과 같이 구문 분석하려고하면 작동합니다 : np.datetime64(str(np.datetime64('now','us'))).

코드 샘플 : 사전에

import numpy as np 
import pandas as pd 

class PlaceholderClass: 
    def time(self): 
     return str(np.datetime64('now', 'us')) 
    def value(self): 
     return 100*np.random.random_sample() 


listOfThings = [PlaceholderClass() for i in range(1000)] 

arr = np.array([(x.time(), x.value()) for x in listOfThings], dtype=[('time', np.datetime64), ('value', np.float)]) 

dataframe = pd.DataFrame(data=arr['value'], index=arr['time']) 

감사

답변

1

Q1 :

나는 먼저 np.array을 다음 dataframe을 만들 필요가 없습니다 생각합니다.

rd = lambda: datetime.date(randint(2005,2025), randint(1,12),randint(1,28)) 

df = pd.DataFrame([(rd(), rd()) for x in range(100)]) 

나중에 추가 :이 예를 들어, 완벽하게 잘 작동

Q2
df = pd.DataFrame((x.value() for x in listOfThings), index=(pd.to_datetime(x.time()) for x in listOfThings)) 

:

내가 pd.to_datetime ('어떤 일')가 거의 항상 그것을 바로 얻을 것으로 나타났습니다 . 형식을 지정하지 않아도. 아마도 이것은 도움이됩니다.

In [115]: pd.to_datetime('2008-09-22T13:57:31.2311892-04:00') 
Out[115]: Timestamp('2008-09-22 17:57:31.231189200') 
+0

답장을 보내 주셔서 감사합니다. @PandasRocks. 그러나 저는 제 경우에 당신의 대답을 어떻게 적용 할 수 있는지 모르겠습니다. 필자의 예제에서'ListOfThings'이 주어 졌을 때, Datetime을 인덱스로 사용하여 데이터 프레임을 생성하는 방법을 설명 할 수 있습니까? – DoubleTrouble

+1

@DoubleTrouble - 다른 행을 추가했습니다. 제네레이터 구문을 사용할 수 있으므로 팬더는 인덱스와 값을 즉석에서 생성합니다. 내가 잘못 본 것이 아니라면 Pandas 시리즈는 질적 인 배열과 구별됩니다. – PandasRocks

+0

그건 아주 깔끔하고, 나를 도와 주셔서 고맙습니다. – DoubleTrouble