이 질문은 누락 된 데이터가있는 시계열에 어려움을 겪던 나 (Remapping `numpy.array` with missing values)의 이전 질문과 다소 관련이 있으며 누군가가 "팬더 사용!"이라고 제안했습니다.. 그래서 여기에 내가 간다 ...누락 된 데이터/레코드가있는 팬더 시간 시리즈 비교
나는 큰 데이터 세트를 다루고 있는데, 기본적으로 서로 다른 관찰 사이트의 시계열로 구성되어있다. 나는 통계적으로 사이트를 비교하고 싶다. 이 데이터 세트는 상당히 지저분합니다. 누락 된 데이터 (예 : -99
으로 표시), 누락 된 시간 기록 (하나의 방송국은 시간 기록을 가질 수 있고, 다른 방송국은 없을 수도 있음) 및 데이터를 포함/비교하려는 경우 (1) 모든 사이트가 특정 변수에 대한 데이터를 가지고 있거나, 또는 (2) 내가 비교하고 싶은 두 사이트는 다른 사이트가 데이터를 가지고 있는지 여부를 무시하고 그 변수에 대한 데이터를 가지고 있습니다.
-99
이 누락 된 값을 나타냅니다
import pandas as pd
from io import StringIO
data = StringIO("""\
1, 2001-01-01, 00:00, 1.0, 0.5, 1.0
1, 2001-01-01, 01:00, 1.1, 0.6, 2.0
1, 2001-01-01, 02:00, 1.2, 0.7, 3.0
1, 2001-01-01, 03:00, 1.3, 0.8, 4.0
2, 2001-01-01, 00:00, 2.0, -99, -99
2, 2001-01-01, 01:00, -99, 1.6, 2.0
2, 2001-01-01, 02:00, 2.2, 1.7, 3.0
2, 2001-01-01, 03:00, 2.3, 1.8, 4.0
3, 2001-01-01, 00:00, 3.0, 2.5, 1.0
3, 2001-01-01, 01:00, 3.1, 2.6, -99
3, 2001-01-01, 02:00, -99, -99, 3.0
3, 2001-01-01, 03:00, 3.3, 2.8, 4.0
3, 2001-01-01, 04:00, 3.4, 2.9, 5.0
""")
columns = ['id','date','time','T','Td','cc']
df = pd.read_table(data, header=None, names=columns, delimiter=',', na_values=-99, parse_dates=[['date','time']])
. 서로 다른 사이트의 데이터 (열 , Td
, cc
)를 비교하고 싶습니다 (두 번째 또는 모두 id
에 관심이있는 변수의 데이터가있는 경우에만 언급 됨). 다른 열의 데이터가 누락되었습니다). 이 예를 들어, 그래서
id=2
또는
id=3
이
T
, 그리고 마지막 레코드가 없습니다 만 다른 시간에 있기 때문에,
2001-01-01, 00:00
및
03:00
에서 데이터를 비교 초래
T
을 비교, 데이터를해야하는 경우
id=3
은 다른
id
에 완전히 없습니다.
나는 몇 시간 동안이 게임을 해왔지만 솔직히 나는 어디서부터 시작해야할지 몰라. 위에서 설명한 기준을 사용하여 n_sites x n_valid_values
(이 예에서는 3x2
)의 numpy.array
을 추출 할 수 있습니까? 그렇다면 추가 분석에 사용할 수 있습니까?
부분으로 편집하지만 정말 (정말) 추한 솔루션은이 같은 뭔가가 작동하는 것 같다 :
# Loop over all indexes where T is nan:
for i in np.where(df['T'].isnull())[0]:
# For each of them, set records with the same date_time to nan
j = np.where(df['date_time'] == df['date_time'][i])[0]
df['T'][j] = np.nan
# Drop all records where T is nan
df2 = df.dropna(subset=['T'])
# Group by the different stations:
g = df2.groupby('id')
# Get the arrays (could automate this based on the unique id's):
v1 = g.get_group(1)['T']
v2 = g.get_group(2)['T']
v3 = g.get_group(3)['T']
을하지만 여전히 id=3
, date_time=2001-01-01, 04:00
에 대한 기록을 드롭하지 않으며, 나는 Pandas
으로 더 우아한 방법이 있다고 생각합니다.
왜이'2, 2001-01-01, 00:00, 2.0, -99, -99' -99는 괜찮습니까? – Boud
이 경우 나는 'T' 열에 데이터가 있는지 여부에 관심이 있습니다. 다른 열은 무시합니다. – Bart