As indicated in the error, convert to 'datetime64[D]'
before using np.busday_count
:
res = np.busday_count(df['Received'].values.astype('datetime64[D]'), df['Complete'].values.astype('datetime64[D]'), weekmask = "Fri Sat") # array([4, 8, 2, 6, 6, 16, 2, 2, 6, 6, 4], dtype = int64)
Copyright 2022 www.appsloveworld.com. All rights reserved.,How to use pandas groupby with a period of time to and find the average count over years within the same time period,How to use python-colormath's Delta E function with pandas Series,How to use Pandas to keep most recent data from Series with overlapping times
As indicated in the error, convert to 'datetime64[D]'
before using np.busday_count
:
res = np.busday_count(df['Received'].values.astype('datetime64[D]'), df['Complete'].values.astype('datetime64[D]'), weekmask = "Fri Sat") # array([4, 8, 2, 6, 6, 16, 2, 2, 6, 6, 4], dtype = int64)
Counts the number of valid days between begindates and enddates, not including the day of enddates.,If enddates specifies a date value that is earlier than the corresponding begindates date value, the count will be negative.,An array with a shape from broadcasting begindates and enddates together, containing the number of valid days between the begin and end dates.,An array of dates to consider as invalid dates. They may be specified in any order, and NaT (not-a-time) dates are ignored. This list is saved in a normalized form that is suited for fast calculations of valid days.
>>> # Number of weekdays in January 2011 ...np.busday_count('2011-01', '2011-02') 21 >>> # Number of weekdays in 2011 >>> np.busday_count('2011', '2012') 260 >>> # Number of Saturdays in 2011 ...np.busday_count('2011', '2012', weekmask = 'Sat') 53
Related: Calculate difference between anycodings_datetime two dates excluding weekends in python?, anycodings_datetime how to use (np.busday_count) with anycodings_datetime pandas.core.series.Series,you can make use of numpy's anycodings_datetime busday_count, Ex:,Note: np.busday_count also allows you to anycodings_datetime set a custom weekmask (exclude days anycodings_datetime other than Saturday and Sunday) or a anycodings_datetime list of holidays. See the docs I linked anycodings_datetime on top.,If you need the output to be of dtype anycodings_datetime timedelta, you can easily cast to that anycodings_datetime via
Currently my script is subtracting my anycodings_dataframe current time with the times that i have in a anycodings_dataframe Dataframe column called "Creation", anycodings_dataframe generating a new column with the days of the anycodings_dataframe difference. I get the difference days with anycodings_dataframe this code:
df['Creation'] = pandas.to_datetime(df["Creation"], dayfirst = "True")
#Generates new column with the days.
df['Difference'] = df.to_datetime('now') - df['Creation']
you can make use of numpy's anycodings_datetime busday_count, Ex:
import pandas as pd import numpy as np # some dummy data df = pd.DataFrame({ 'Creation': ['2021-03-29', '2021-03-30'] }) # make sure we have datetime df['Creation'] = pd.to_datetime(df['Creation']) # set now to a fixed date now = pd.Timestamp('2021-04-05') # difference in business days, excluding weekends # need to cast to datetime64[D] dtype so that np.busday_count works df['busday_diff'] = np.busday_count(df['Creation'].values.astype('datetime64[D]'), np.repeat(now, df['Creation'].size).astype('datetime64[D]')) df['busday_diff'] # since I didn 't define holidays, potential Easter holiday is excluded: 0 5 1 4 Name: busday_diff, dtype: int64
If you need the output to be of dtype anycodings_datetime timedelta, you can easily cast to that anycodings_datetime via
df['busday_diff'] = pd.to_timedelta(df['busday_diff'], unit = 'd')
df['busday_diff']
0 5 days
1 4 days
Name: busday_diff, dtype: timedelta64[ns]
pandas has proven very successful as a tool for working with time series data, especially in the financial data analysis space. Using the NumPy datetime64 and timedelta64 dtypes, we have consolidated a large number of features from other Python libraries like scikits.timeseries as well as created a tremendous amount of new functionality for manipulating time series data.,These can be used as arguments to date_range, bdate_range, constructors for DatetimeIndex, as well as various other timeseries-related functions in pandas.,There are several time/date properties that one can access from Timestamp or a collection of timestamps like a DatetimeIndex.,Using the .values accessor on a Series, returns an NumPy array of the data. These values are converted to UTC, as NumPy does not currently support timezones (even though it is printing in the local timezone!).
# 72 hours starting with midnight Jan 1 st, 2011
In[1]: rng = pd.date_range('1/1/2011', periods = 72, freq = 'H')
In[2]: rng[: 5]
Out[2]:
DatetimeIndex(['2011-01-01 00:00:00', '2011-01-01 01:00:00',
'2011-01-01 02:00:00', '2011-01-01 03:00:00',
'2011-01-01 04:00:00'
],
dtype = 'datetime64[ns]', freq = 'H')
In[3]: ts = pd.Series(np.random.randn(len(rng)), index = rng)
In[4]: ts.head()
Out[4]:
2011 - 01 - 01 00: 00: 00 0.469112
2011 - 01 - 01 01: 00: 00 - 0.282863
2011 - 01 - 01 02: 00: 00 - 1.509059
2011 - 01 - 01 03: 00: 00 - 1.135632
2011 - 01 - 01 04: 00: 00 1.212112
Freq: H, dtype: float64
# to 45 minute frequency and forward fill
In[5]: converted = ts.asfreq('45Min', method = 'pad')
In[6]: converted.head()
Out[6]:
2011 - 01 - 01 00: 00: 00 0.469112
2011 - 01 - 01 00: 45: 00 0.469112
2011 - 01 - 01 01: 30: 00 - 0.282863
2011 - 01 - 01 02: 15: 00 - 1.509059
2011 - 01 - 01 03: 00: 00 - 1.135632
Freq: 45 T, dtype: float64
# Daily means
In[7]: ts.resample('D').mean()
Out[7]:
2011 - 01 - 01 - 0.319569
2011 - 01 - 02 - 0.337703
2011 - 01 - 03 0.117258
Freq: D, dtype: float64
In[8]: pd.Timestamp(datetime(2012, 5, 1))
Out[8]: Timestamp('2012-05-01 00:00:00')
In[9]: pd.Timestamp('2012-05-01')
Out[9]: Timestamp('2012-05-01 00:00:00')
In[10]: pd.Timestamp(2012, 5, 1)
Out[10]: Timestamp('2012-05-01 00:00:00')
In[11]: pd.Period('2011-01')
Out[11]: Period('2011-01', 'M')
In[12]: pd.Period('2012-05', freq = 'D')
Out[12]: Period('2012-05-01', 'D')
Although we can’t ‘just use strings‘ to represent dates and times, we will use strings as input to the main function we’ll be working with: np.datetime64().,We will be using this to find the closest business day for any given date we pass to this function. ,For example, we want to find the price of the stock market on 18th May 2019. This is impossible since that is a Saturday and the stock market is closed. We’ll use this function to get the np.datetime64 object closest to it that is a business day.,This is easy to remember as the dates and times go left to right from big to small. This will be important later on when we do arithmetic with datetime objects.
Now it’s time for our first examples (I’ve tried to pick dates that are easy to read for learning purposes).
# 2000 >>> np.datetime64('2000') # November 2000 >>> np.datetime64('2000-11') # 22n d November 2000 >>> np.datetime64('2000-11-22') # 7 th June 1987 at 16: 22: 44(twenty two minutes past four in the afternoon and forty four seconds) >>> np.datetime64('2000-11-22 16:22:44') numpy.datetime64('2000-11-22T16:22:44')
For example, let’s say we have a specific day but only want the month:
# 22n d November 2000 >>> day = np.datetime64('2000-11-22') # Just keep the month >>> month = np.datetime64(day, 'M') numpy.datetime64('2000-11') # Change the scale of month to hours >>> hour_from_month = np.datetime64(month, 'h') numpy.datetime64('2000-11-01T00', 'h') # Change the scale of day to hours >>> hour_from_day = np.datetime64(day, 'h') numpy.datetime64('2000-11-22T00', 'h')
To check the time unit of a np.datetime64
object, we simply use the .dtype
attribute:
>>> day.dtype
dtype('<M8[D]')>>> month.dtype
dtype('<M8[M]')
The number of days between 1st Jan 2013 and 1st Jan 2012 is 366 as it was a leap year.
>>> np.datetime64('2013-01-01') - np.datetime64('2012-01-01') numpy.timedelta64(366, 'D') # Add on 15 days to June 2000 >>> np.datetime64('2000-05') + np.timedelta64(15, 'D') numpy.datetime64('2000-05-16') # What is 5 hours after 1 pm on 22n d Nov 2000 ? >>> np.datetime64('2000-11-22 13:00') + np.timedelta64(5, 'h') numpy.datetime64('2000-11-22T18:00')
The first is to use two instances of np.timedelta64
:
# Add on 4 months and 3 days >>> some_date + np.timedelta64(4, 'M') + np.timedelta64(3, 'D')