Quero subtrair as datas em 'A' das datas em 'B' e adicionar uma nova coluna com a diferença.
df
A B
one 2014-01-01 2014-02-28
two 2014-02-03 2014-03-01
Tentei o seguinte, mas recebo um erro quando tento incluir isso em um loop for ...
import datetime
date1=df['A'][0]
date2=df['B'][0]
mdate1 = datetime.datetime.strptime(date1, "%Y-%m-%d").date()
rdate1 = datetime.datetime.strptime(date2, "%Y-%m-%d").date()
delta = (mdate1 - rdate1).days
print delta
O que devo fazer?
python
pandas
date-difference
Jase Villam
fonte
fonte
pd.offsets.Day(1)
(com um 's'). Eu também costumo negar, então você começa(df['A'] - df['B']) / pd.offsets.Day(-1)
(df['A'] - df['B']) / np.timedelta64(-1, 'D')
de motivos que não entendo totalmente..isnull()
atributo e 2) eles têm um.day
atributo, mas os dados não perdidos têm um.days
atributo. Então, depois de criar a nova variável, executei um loop em cadaobs
ervação que verifica:if hasattr(obs,'days')
então atribuaobs.days
e então atribuanp.nan
.Para remover o elemento de texto 'dias', você também pode usar o acessador dt () para a série: https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.dt.html
Assim,
que retorna:
fonte
df['C'] = (df['B'] - df['A']).dt.days
não funcionou e tive que usardf['C'] = (df['B'] - df['A']).days
. Alguma ideia de por que o meu não deu o número de dias conforme o esperado?datetime64[ns]
para ser mais preciso). Quando o fizdf['C'] = (df['B'] - df['A']).dt.days
, recebi um erro de atributo que dizia AttributeError: objeto 'Timedelta' não tem atributo 'dt' , então tentei df ['C'] = (df ['B'] - df ['A']). dias que me deram a resposta desejada. (É claro que estou usando meu próprio dataframe, não o do exemplo acima. Ou poderia ser porque também tenho tempo na minha data e não como em2018-09-24 10:17:18.800277
)A compreensão de uma lista é sua melhor aposta para a maneira mais pitônica (e mais rápida) de fazer isso:
Se suas colunas não estiverem no formato data e hora. A sintaxe mais curta seria:
df.A = pd.to_datetime(df.A)
fonte
Que tal agora:
fonte