Saya ingin mengurangi tanggal di 'A' dari tanggal di 'B' dan menambahkan kolom baru dengan perbedaannya.
df
A B
one 2014-01-01 2014-02-28
two 2014-02-03 2014-03-01
Saya sudah mencoba yang berikut ini, tetapi mendapatkan kesalahan ketika saya mencoba memasukkan ini ke dalam for loop ...
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
Apa yang harus saya lakukan?
python
pandas
date-difference
Jase Villam
sumber
sumber
pd.offsets.Day(1)
(dengan 's'). Saya juga biasanya meniadakannya, jadi Anda mendapatkan(df['A'] - df['B']) / pd.offsets.Day(-1)
(df['A'] - df['B']) / np.timedelta64(-1, 'D')
alasan yang saya tidak sepenuhnya mengerti..dt.days
atribut yang sangat disukai.Untuk menghapus elemen teks 'hari', Anda juga dapat menggunakan pengakses dt () untuk rangkaian: https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.dt.html
Begitu,
df[['A','B']] = df[['A','B']].apply(pd.to_datetime) #if conversion required df['C'] = (df['B'] - df['A']).dt.days
yang mengembalikan:
A B C one 2014-01-01 2014-02-28 58 two 2014-02-03 2014-03-01 26
sumber
df['C'] = (df['B'] - df['A']).dt.days
tidak berhasil dan saya harus menggunakandf['C'] = (df['B'] - df['A']).days
. Adakah ide mengapa saya tidak memberikan jumlah hari seperti yang diharapkan?datetime64[ns]
tepatnya). Ketika saya melakukannyadf['C'] = (df['B'] - df['A']).dt.days
, saya mendapat kesalahan atribut yang mengatakan AttributeError: Objek 'Timedelta' tidak memiliki atribut 'dt' , jadi saya mencoba df ['C'] = (df ['B'] - df ['A']). hari yang memberi saya jawaban yang diinginkan. (Tentu saja saya menggunakan kerangka data saya sendiri bukan dengan contoh di atas. Atau mungkinkah karena saya juga punya waktu di kencan saya dan bukan seperti di2018-09-24 10:17:18.800277
)Pemahaman daftar adalah taruhan terbaik Anda untuk cara paling Pythonic (dan tercepat) untuk melakukan ini:
[int(i.days) for i in (df.B - df.A)]
Jika kolom Anda tidak dalam format datetime. Sintaks yang lebih pendek adalah:
df.A = pd.to_datetime(df.A)
sumber
Bagaimana dengan ini:
times['days_since'] = max(list(df.index.values)) times['days_since'] = times['days_since'] - times['months'] times
sumber