Въпреки че Pandas има функционалност за времеви серии, все още се боря с кадри с данни, които имат непълни данни за времеви серии.
Вижте снимките по-долу, долната снимка има пълни данни, горната има пропуски. И двете снимки показват правилни стойности. В червено са колоните, които искам да изчисля, като използвам данните в черно. Колона Cumm_Issd
показва натрупаните емитирани акции през годината, MV
е пазарната стойност.
Искам да изчисля емитираните акции на тримесечие (IssdQtr
), тримесечната промяна в пазарната стойност (D_MV_Q
) и MV
от миналата година (L_MV_Y
).
Вижте за основните данни от cvs тази връзка за пълните данни и тази връзка за празните данни. Има две фирми 1020180
и 1020201
.
Въпреки това, когато опитам метода Pandas shift
, той се проваля, когато има пропуски, опитайте сами да използвате csv файловете и кода по-долу. Всички колони (DiffEq, Dif1MV, Lag4MV
) се различават - за някои тримесечия - съответно от IssdQtr, D_MV_Q, L_MV_Y
.
Има ли начини за справяне с пропуските в данните с помощта на Pandas?
import pandas as pd
import numpy as np
import os
dfg = pd.read_csv('example_soverflow_gaps.csv',low_memory=False)
dfg['date'] = pd.to_datetime(dfg['Period'], format='%Y%m%d')
dfg['Q'] = pd.DatetimeIndex(dfg['date']).to_period('Q')
dfg['year'] = dfg['date'].dt.year
dfg['DiffEq'] = dfg.sort_values(['Q']).groupby(['Firm','year'])['Cumm_Issd'].diff()
dfg['Dif1MV'] = dfg.groupby(['Firm'])['MV'].diff(1)
dfg['Lag4MV'] = dfg.groupby(['Firm'])['MV'].shift(4)
Пропуснати данни:
Пълни данни:
pd.DataFrame.fillna(method='ffill')
опция ли е за вас? - person Aleksey Bilogur   schedule 20.03.2017dfg.groupby(['Firm'])['MV']..fillna(np.nan).shift(4)
тогава.pandas
автоматично разпространява NaN стойности в операции като тази. - person Aleksey Bilogur   schedule 20.03.2017