Skip to content

PERF: Vectorized Timedelta property access (#18092) #18225

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Nov 12, 2017

Conversation

WillAyd
Copy link
Member

@WillAyd WillAyd commented Nov 11, 2017

closes #18092

  • closes #xxxx
  • tests added / passed
  • passes git diff upstream/master -u -- "*.py" | flake8 --diff
  • whatsnew entry

@jreback
Copy link
Contributor

jreback commented Nov 11, 2017

can u post the asv results?

@WillAyd
Copy link
Member Author

WillAyd commented Nov 11, 2017

See below. I was not able to consistently reproduce the one increase for timeseries.ToDatetime.time_iso8601_tz_spaceformat

asv continuous -f 1.1 upstream/master HEAD -b timedelta -b timeseries -b indexing

[  0.00%] · For pandas commit hash e369c1fc:
[  0.00%] ·· Building for conda-py3.6-Cython-matplotlib-numexpr-numpy-openpyxl-pytables-pytest-scipy-sqlalchemy-xlrd-xlsxwriter-xlwt......................................................
[  0.00%] ·· Benchmarking conda-py3.6-Cython-matplotlib-numexpr-numpy-openpyxl-pytables-pytest-scipy-sqlalchemy-xlrd-xlsxwriter-xlwt
[  0.30%] ··· Running frame_methods.Iteration.time_iteritems_indexing                                                   15.0±0.06ms
[  0.60%] ··· Running frame_methods.frame_assign_timeseries_index.time_frame_assign_timeseries_index                    1.70±0.04ms
[  0.90%] ··· Running indexing.DataFrameIndexing.time_boolean_rows                                                          264±2μs
[  1.20%] ··· Running indexing.DataFrameIndexing.time_boolean_rows_object                                                   477±6μs
[  1.51%] ··· Running indexing.DataFrameIndexing.time_get_value                                                         3.98±0.02μs
[  1.81%] ··· Running indexing.DataFrameIndexing.time_get_value_ix                                                       21.6±0.4μs
[  2.11%] ··· Running indexing.DataFrameIndexing.time_getitem_scalar                                                     10.5±0.2μs
[  2.41%] ··· Running indexing.DataFrameIndexing.time_iloc_big                                                              112±3μs
[  2.71%] ··· Running indexing.DataFrameIndexing.time_iloc_dups                                                             188±2μs
[  3.01%] ··· Running indexing.DataFrameIndexing.time_loc_dups                                                             995±20μs
[  3.31%] ··· Running indexing.DatetimeIndexing.time_getitem_scalar                                                     4.05±0.03μs
[  3.61%] ··· Running indexing.IndexerLookup.time_lookup_iloc                                                               277±5ns
[  3.92%] ··· Running indexing.IndexerLookup.time_lookup_ix                                                             16.0±0.08μs
[  4.22%] ··· Running indexing.IndexerLookup.time_lookup_loc                                                                290±3ns
[  4.52%] ··· Running indexing.IndexingMethods.time_get_loc_float                                                        7.91±0.3μs
[  4.82%] ··· Running indexing.IndexingMethods.time_take_dtindex                                                        3.90±0.04ms
[  5.12%] ··· Running indexing.IndexingMethods.time_take_intindex                                                       3.89±0.09ms
[  5.42%] ··· Running indexing.Int64Indexing.time_getitem_array                                                         1.10±0.01ms
[  5.72%] ··· Running indexing.Int64Indexing.time_getitem_list_like                                                         423±5μs
[  6.02%] ··· Running indexing.Int64Indexing.time_getitem_lists                                                          6.76±0.1ms
[  6.33%] ··· Running indexing.Int64Indexing.time_getitem_scalar                                                         16.1±0.2μs
[  6.63%] ··· Running indexing.Int64Indexing.time_getitem_slice                                                          45.8±0.4μs
[  6.93%] ··· Running indexing.Int64Indexing.time_iloc_array                                                             60.4±0.3μs
[  7.23%] ··· Running indexing.Int64Indexing.time_iloc_list_like                                                         34.3±0.4μs
[  7.53%] ··· Running indexing.Int64Indexing.time_iloc_scalar                                                            12.1±0.1μs
[  7.83%] ··· Running indexing.Int64Indexing.time_iloc_slice                                                             34.1±0.4μs
[  8.13%] ··· Running indexing.Int64Indexing.time_ix_array                                                                  780±5μs
[  8.43%] ··· Running indexing.Int64Indexing.time_ix_list_like                                                              305±4μs
[  8.73%] ··· Running indexing.Int64Indexing.time_ix_scalar                                                              54.1±0.7μs
[  9.04%] ··· Running indexing.Int64Indexing.time_ix_slice                                                               73.3±0.9μs
[  9.34%] ··· Running indexing.Int64Indexing.time_loc_array                                                                 930±8μs
[  9.64%] ··· Running indexing.Int64Indexing.time_loc_list_like                                                             355±3μs
[  9.94%] ··· Running indexing.Int64Indexing.time_loc_scalar                                                             44.1±0.3μs
[ 10.24%] ··· Running indexing.Int64Indexing.time_loc_slice                                                                49.0±2μs
[ 10.54%] ··· Running indexing.IntervalIndexing.time_getitem_list                                                          95.1±2μs
[ 10.84%] ··· Running indexing.IntervalIndexing.time_getitem_scalar                                                        43.3±4μs
[ 11.14%] ··· Running indexing.IntervalIndexing.time_loc_list                                                              76.0±1μs
[ 11.45%] ··· Running indexing.IntervalIndexing.time_loc_scalar                                                            67.4±2μs
[ 11.75%] ··· Running indexing.MultiIndexing.time_frame_xs_mi_ix                                                            312±2μs
[ 12.05%] ··· Running indexing.MultiIndexing.time_is_monotonic                                                              240±2ns
[ 12.35%] ··· Running indexing.MultiIndexing.time_multiindex_get_indexer                                                1.96±0.04ms
[ 12.65%] ··· Running indexing.MultiIndexing.time_multiindex_large_get_loc                                                  270±5μs
[ 12.95%] ··· Running indexing.MultiIndexing.time_multiindex_large_get_loc_warm                                             303±3ms
[ 13.25%] ··· Running indexing.MultiIndexing.time_multiindex_med_get_loc                                                4.39±0.02μs
[ 13.55%] ··· Running indexing.MultiIndexing.time_multiindex_med_get_loc_warm                                           4.20±0.03ms
[ 13.86%] ··· Running indexing.MultiIndexing.time_multiindex_slicers                                                    5.51±0.02ms
[ 14.16%] ··· Running indexing.MultiIndexing.time_multiindex_small_get_loc_warm                                         4.10±0.05ms
[ 14.46%] ··· Running indexing.MultiIndexing.time_multiindex_string_get_loc                                             4.19±0.03μs
[ 14.76%] ··· Running indexing.MultiIndexing.time_remove_unused_levels                                                      386±3μs
[ 15.06%] ··· Running indexing.MultiIndexing.time_series_xs_mi_ix                                                           273±2μs
[ 15.36%] ··· Running indexing.PanelIndexing.time_subset                                                                   903±10μs
[ 15.66%] ··· Running indexing.StringIndexing.time_get_value                                                                354±3ms
[ 15.96%] ··· Running indexing.StringIndexing.time_getitem_label_slice                                                      357±3ms
[ 16.27%] ··· Running indexing.StringIndexing.time_getitem_pos_slice                                                     49.2±0.1μs
[ 16.57%] ··· Running inference.DtypeInfer.time_timedelta64_1                                                            59.9±0.4ms
[ 16.87%] ··· Running inference.DtypeInfer.time_timedelta64_2                                                           10.3±0.08ms
[ 17.17%] ··· Running period.period_standard_indexing.time_align                                                           938±10μs
[ 17.47%] ··· Running period.period_standard_indexing.time_get_loc                                                       9.71±0.2μs
[ 17.77%] ··· Running period.period_standard_indexing.time_intersection                                                     172±2μs
[ 18.07%] ··· Running period.period_standard_indexing.time_series_loc                                                    66.1±0.7μs
[ 18.37%] ··· Running period.period_standard_indexing.time_shallow_copy                                                  8.52±0.1μs
[ 18.67%] ··· Running period.period_standard_indexing.time_shape                                                            441±5ns
[ 18.98%] ··· Running reindex.Reindexing.time_reindex_columns                                                               502±3μs
[ 19.28%] ··· Running reindex.Reindexing.time_reindex_dates                                                                 278±3μs
[ 19.58%] ··· Running reindex.Reindexing.time_reindex_multiindex                                                         74.8±0.4ms
[ 19.88%] ··· Running replace.replace_convert.time_replace_frame_timedelta                                                  409±1ms
[ 20.18%] ··· Running replace.replace_convert.time_replace_series_timedelta                                                 258±2ms
[ 20.48%] ··· Running timedelta.DatetimeAccessor.time_dt_accessor                                                        25.8±0.4μs
[ 20.78%] ··· Running timedelta.ToTimedelta.time_convert_coerce                                                          63.2±0.6ms
[ 21.08%] ··· Running timedelta.ToTimedelta.time_convert_ignore                                                          57.1±0.7ms
[ 21.39%] ··· Running timedelta.ToTimedelta.time_convert_int                                                                122±2μs
[ 21.69%] ··· Running timedelta.ToTimedelta.time_convert_string                                                          16.4±0.2ms
[ 21.99%] ··· Running timedelta.ToTimedelta.time_convert_string_seconds                                                  9.85±0.1ms
[ 22.29%] ··· Running timeseries.AsOf.time_asof                                                                          6.45±0.2ms
[ 22.59%] ··· Running timeseries.AsOf.time_asof_nan                                                                     6.41±0.06ms
[ 22.89%] ··· Running timeseries.AsOf.time_asof_nan_single                                                              3.31±0.02ms
[ 23.19%] ··· Running timeseries.AsOf.time_asof_single                                                                   30.1±0.5μs
[ 23.49%] ··· Running timeseries.AsOf.time_asof_single_early                                                             22.3±0.2μs
[ 23.80%] ··· Running timeseries.AsOfDataFrame.time_asof                                                                 34.4±0.3ms
[ 24.10%] ··· Running timeseries.AsOfDataFrame.time_asof_nan                                                             38.6±0.5ms
[ 24.40%] ··· Running timeseries.AsOfDataFrame.time_asof_nan_single                                                      12.0±0.4ms
[ 24.70%] ··· Running timeseries.AsOfDataFrame.time_asof_single                                                          9.84±0.1ms
[ 25.00%] ··· Running timeseries.AsOfDataFrame.time_asof_single_early                                                    84.8±0.7μs
[ 25.30%] ··· Running timeseries.DatetimeAccessor.time_dt_accessor                                                       23.2±0.6μs
[ 25.60%] ··· Running timeseries.DatetimeAccessor.time_dt_accessor_normalize                                            5.11±0.06ms
[ 25.90%] ··· Running timeseries.DatetimeIndex.time_add_offset_delta                                                       1.71±0ms
[ 26.20%] ··· Running timeseries.DatetimeIndex.time_add_offset_fast                                                     7.23±0.09ms
[ 26.51%] ··· Running timeseries.DatetimeIndex.time_add_offset_slow                                                         462±3ms
[ 26.81%] ··· Running timeseries.DatetimeIndex.time_add_timedelta                                                          1.63±0ms
[ 27.11%] ··· Running timeseries.DatetimeIndex.time_dti_factorize                                                       7.52±0.05ms
[ 27.41%] ··· Running timeseries.DatetimeIndex.time_dti_tz_factorize                                                    7.43±0.04ms
[ 27.71%] ··· Running timeseries.DatetimeIndex.time_infer_dst                                                           2.40±0.01ms
[ 28.01%] ··· Running timeseries.DatetimeIndex.time_infer_freq_business                                                 7.10±0.04ms
[ 28.31%] ··· Running timeseries.DatetimeIndex.time_infer_freq_daily                                                    7.15±0.02ms
[ 28.61%] ··· Running timeseries.DatetimeIndex.time_infer_freq_none                                                      16.3±0.1ms
[ 28.92%] ··· Running timeseries.DatetimeIndex.time_normalize                                                           2.77±0.01ms
[ 29.22%] ··· Running timeseries.DatetimeIndex.time_reset_index                                                             365±2μs
[ 29.52%] ··· Running timeseries.DatetimeIndex.time_reset_index_tz                                                          451±3μs
[ 29.82%] ··· Running timeseries.DatetimeIndex.time_timeseries_is_month_start                                               404±2μs
[ 30.12%] ··· Running timeseries.DatetimeIndex.time_timestamp_tzinfo_cons                                                  9.41±0μs
[ 30.42%] ··· Running timeseries.DatetimeIndex.time_unique                                                                103±0.1μs
[ 30.72%] ··· Running timeseries.Iteration.time_iter_datetimeindex                                                          610±4ms
[ 31.02%] ··· Running timeseries.Iteration.time_iter_datetimeindex_preexit                                              11.1±0.06ms
[ 31.33%] ··· Running timeseries.Iteration.time_iter_periodindex                                                              2.01s
[ 31.63%] ··· Running timeseries.Iteration.time_iter_periodindex_preexit                                                 21.2±0.2ms
[ 31.93%] ··· Running timeseries.Offsets.time_custom_bday_apply                                                          22.5±0.2μs
[ 32.23%] ··· Running timeseries.Offsets.time_custom_bday_apply_dt64                                                     24.8±0.3μs
[ 32.53%] ··· Running timeseries.Offsets.time_custom_bday_cal_decr                                                       34.3±0.3μs
[ 32.83%] ··· Running timeseries.Offsets.time_custom_bday_cal_incr                                                       30.4±0.5μs
[ 33.13%] ··· Running timeseries.Offsets.time_custom_bday_cal_incr_n                                                     29.9±0.5μs
[ 33.43%] ··· Running timeseries.Offsets.time_custom_bday_cal_incr_neg_n                                                 34.3±0.4μs
[ 33.73%] ··· Running timeseries.Offsets.time_custom_bday_decr                                                           33.4±0.4μs
[ 34.04%] ··· Running timeseries.Offsets.time_custom_bday_incr                                                           25.6±0.3μs
[ 34.34%] ··· Running timeseries.Offsets.time_custom_bmonthbegin_decr_n                                                     149±2μs
[ 34.64%] ··· Running timeseries.Offsets.time_custom_bmonthbegin_incr_n                                                     178±7μs
[ 34.94%] ··· Running timeseries.Offsets.time_custom_bmonthend_decr_n                                                      330±20μs
[ 35.24%] ··· Running timeseries.Offsets.time_custom_bmonthend_incr                                                         173±6μs
[ 35.54%] ··· Running timeseries.Offsets.time_custom_bmonthend_incr_n                                                       178±3μs
[ 35.84%] ··· Running timeseries.Offsets.time_timeseries_day_apply                                                       28.3±0.4μs
[ 36.14%] ··· Running timeseries.Offsets.time_timeseries_day_incr                                                        31.3±0.7μs
[ 36.45%] ··· Running timeseries.Offsets.time_timeseries_year_apply                                                     11.2±0.06μs
[ 36.75%] ··· Running timeseries.Offsets.time_timeseries_year_incr                                                       14.5±0.2μs
[ 37.05%] ··· Running timeseries.ResampleDataFrame.time_max_numpy                                                       2.21±0.01ms
[ 37.35%] ··· Running timeseries.ResampleDataFrame.time_max_string                                                      2.20±0.01ms
[ 37.65%] ··· Running timeseries.ResampleDataFrame.time_mean_numpy                                                      1.91±0.02ms
[ 37.95%] ··· Running timeseries.ResampleDataFrame.time_mean_string                                                     1.95±0.03ms
[ 38.25%] ··· Running timeseries.ResampleDataFrame.time_min_numpy                                                       2.23±0.04ms
[ 38.55%] ··· Running timeseries.ResampleDataFrame.time_min_string                                                      2.22±0.02ms
[ 38.86%] ··· Running timeseries.ResampleSeries.time_1min_5min_mean                                                     1.02±0.01ms
[ 39.16%] ··· Running timeseries.ResampleSeries.time_1min_5min_ohlc                                                     1.11±0.01ms
[ 39.46%] ··· Running timeseries.ResampleSeries.time_period_downsample_mean                                              11.1±0.2ms
[ 39.76%] ··· Running timeseries.ResampleSeries.time_resample_datetime64                                                1.67±0.01ms
[ 40.06%] ··· Running timeseries.ResampleSeries.time_timestamp_downsample_mean                                          4.84±0.02ms
[ 40.36%] ··· Running timeseries.SemiMonthOffset.time_begin_apply                                                        51.4±0.5μs
[ 40.66%] ··· Running timeseries.SemiMonthOffset.time_begin_apply_index                                                     468±5ms
[ 40.96%] ··· Running timeseries.SemiMonthOffset.time_begin_decr                                                         59.4±0.7μs
[ 41.27%] ··· Running timeseries.SemiMonthOffset.time_begin_decr_n                                                         63.8±2μs
[ 41.57%] ··· Running timeseries.SemiMonthOffset.time_begin_decr_rng                                                        473±6ms
[ 41.87%] ··· Running timeseries.SemiMonthOffset.time_begin_incr                                                         56.1±0.5μs
[ 42.17%] ··· Running timeseries.SemiMonthOffset.time_begin_incr_n                                                       59.3±0.9μs
[ 42.47%] ··· Running timeseries.SemiMonthOffset.time_begin_incr_rng                                                       489±20ms
[ 42.77%] ··· Running timeseries.SemiMonthOffset.time_end_apply                                                            56.2±2μs
[ 43.07%] ··· Running timeseries.SemiMonthOffset.time_end_apply_index                                                       503±6ms
[ 43.37%] ··· Running timeseries.SemiMonthOffset.time_end_decr                                                             63.7±3μs
[ 43.67%] ··· Running timeseries.SemiMonthOffset.time_end_decr_n                                                           69.1±2μs
[ 43.98%] ··· Running timeseries.SemiMonthOffset.time_end_decr_rng                                                          521±9ms
[ 44.28%] ··· Running timeseries.SemiMonthOffset.time_end_incr                                                             56.9±2μs
[ 44.58%] ··· Running timeseries.SemiMonthOffset.time_end_incr_n                                                           60.3±1μs
[ 44.88%] ··· Running timeseries.SemiMonthOffset.time_end_incr_rng                                                         504±10ms
[ 45.18%] ··· Running timeseries.SeriesArithmetic.time_add_offset_delta                                                 3.42±0.05ms
[ 45.48%] ··· Running timeseries.SeriesArithmetic.time_add_offset_fast                                                   8.70±0.2ms
[ 45.78%] ··· Running timeseries.SeriesArithmetic.time_add_offset_slow                                                      454±1ms
[ 46.08%] ··· Running timeseries.TimeDatetimeConverter.time_convert                                                      4.93±0.1ms
[ 46.39%] ··· Running timeseries.TimeSeries.time_add_irregular                                                          10.3±0.09ms
[ 46.69%] ··· Running timeseries.TimeSeries.time_large_lookup_value                                                     2.13±0.05ms
[ 46.99%] ··· Running timeseries.TimeSeries.time_sort_index_monotonic                                                    64.7±0.8μs
[ 47.29%] ··· Running timeseries.TimeSeries.time_sort_index_non_monotonic                                               9.03±0.08ms
[ 47.59%] ··· Running timeseries.TimeSeries.time_timeseries_slice_minutely                                               64.3±0.9μs
[ 47.89%] ··· Running timeseries.ToDatetime.time_format_YYYYMMDD                                                        5.08±0.08ms
[ 48.19%] ··· Running timeseries.ToDatetime.time_format_exact                                                               507±4ms
[ 48.49%] ··· Running timeseries.ToDatetime.time_format_no_exact                                                            479±6ms
[ 48.80%] ··· Running timeseries.ToDatetime.time_iso8601                                                                3.85±0.06ms
[ 49.10%] ··· Running timeseries.ToDatetime.time_iso8601_format                                                         3.80±0.01ms
[ 49.40%] ··· Running timeseries.ToDatetime.time_iso8601_format_no_sep                                                  4.02±0.06ms
[ 49.70%] ··· Running timeseries.ToDatetime.time_iso8601_nosep                                                          4.34±0.07ms
[ 50.00%] ··· Running timeseries.ToDatetime.time_iso8601_tz_spaceformat                                                     223±5ms
[ 50.00%] · For pandas commit hash f68bf254:
[ 50.00%] ·· Building for conda-py3.6-Cython-matplotlib-numexpr-numpy-openpyxl-pytables-pytest-scipy-sqlalchemy-xlrd-xlsxwriter-xlwt.........................................................
[ 50.00%] ·· Benchmarking conda-py3.6-Cython-matplotlib-numexpr-numpy-openpyxl-pytables-pytest-scipy-sqlalchemy-xlrd-xlsxwriter-xlwt
[ 50.30%] ··· Running frame_methods.Iteration.time_iteritems_indexing                                                   15.1±0.07ms
[ 50.60%] ··· Running frame_methods.frame_assign_timeseries_index.time_frame_assign_timeseries_index                    1.70±0.03ms
[ 50.90%] ··· Running indexing.DataFrameIndexing.time_boolean_rows                                                          265±2μs
[ 51.20%] ··· Running indexing.DataFrameIndexing.time_boolean_rows_object                                                   486±9μs
[ 51.51%] ··· Running indexing.DataFrameIndexing.time_get_value                                                         4.14±0.09μs
[ 51.81%] ··· Running indexing.DataFrameIndexing.time_get_value_ix                                                       23.4±0.4μs
[ 52.11%] ··· Running indexing.DataFrameIndexing.time_getitem_scalar                                                     10.4±0.2μs
[ 52.41%] ··· Running indexing.DataFrameIndexing.time_iloc_big                                                              119±9μs
[ 52.71%] ··· Running indexing.DataFrameIndexing.time_iloc_dups                                                            219±10μs
[ 53.01%] ··· Running indexing.DataFrameIndexing.time_loc_dups                                                           1.23±0.1ms
[ 53.31%] ··· Running indexing.DatetimeIndexing.time_getitem_scalar                                                     4.21±0.08μs
[ 53.61%] ··· Running indexing.IndexerLookup.time_lookup_iloc                                                               284±4ns
[ 53.92%] ··· Running indexing.IndexerLookup.time_lookup_ix                                                              15.6±0.6μs
[ 54.22%] ··· Running indexing.IndexerLookup.time_lookup_loc                                                                286±4ns
[ 54.52%] ··· Running indexing.IndexingMethods.time_get_loc_float                                                        7.45±0.3μs
[ 54.82%] ··· Running indexing.IndexingMethods.time_take_dtindex                                                         3.68±0.1ms
[ 55.12%] ··· Running indexing.IndexingMethods.time_take_intindex                                                       3.69±0.05ms
[ 55.42%] ··· Running indexing.Int64Indexing.time_getitem_array                                                          1.49±0.2ms
[ 55.72%] ··· Running indexing.Int64Indexing.time_getitem_list_like                                                        475±10μs
[ 56.02%] ··· Running indexing.Int64Indexing.time_getitem_lists                                                          7.01±0.1ms
[ 56.33%] ··· Running indexing.Int64Indexing.time_getitem_scalar                                                         16.4±0.1μs
[ 56.63%] ··· Running indexing.Int64Indexing.time_getitem_slice                                                            46.0±1μs
[ 56.93%] ··· Running indexing.Int64Indexing.time_iloc_array                                                               60.8±2μs
[ 57.23%] ··· Running indexing.Int64Indexing.time_iloc_list_like                                                         36.6±0.8μs
[ 57.53%] ··· Running indexing.Int64Indexing.time_iloc_scalar                                                            13.1±0.4μs
[ 57.83%] ··· Running indexing.Int64Indexing.time_iloc_slice                                                             35.1±0.9μs
[ 58.13%] ··· Running indexing.Int64Indexing.time_ix_array                                                                 805±10μs
[ 58.43%] ··· Running indexing.Int64Indexing.time_ix_list_like                                                              310±2μs
[ 58.73%] ··· Running indexing.Int64Indexing.time_ix_scalar                                                              56.2±0.9μs
[ 59.04%] ··· Running indexing.Int64Indexing.time_ix_slice                                                               73.2±0.9μs
[ 59.34%] ··· Running indexing.Int64Indexing.time_loc_array                                                             1.00±0.02ms
[ 59.64%] ··· Running indexing.Int64Indexing.time_loc_list_like                                                            454±20μs
[ 59.94%] ··· Running indexing.Int64Indexing.time_loc_scalar                                                               46.7±1μs
[ 60.24%] ··· Running indexing.Int64Indexing.time_loc_slice                                                                52.4±2μs
[ 60.54%] ··· Running indexing.IntervalIndexing.time_getitem_list                                                          99.7±5μs
[ 60.84%] ··· Running indexing.IntervalIndexing.time_getitem_scalar                                                        45.1±1μs
[ 61.14%] ··· Running indexing.IntervalIndexing.time_loc_list                                                              72.9±2μs
[ 61.45%] ··· Running indexing.IntervalIndexing.time_loc_scalar                                                            68.1±3μs
[ 61.75%] ··· Running indexing.MultiIndexing.time_frame_xs_mi_ix                                                           325±10μs
[ 62.05%] ··· Running indexing.MultiIndexing.time_is_monotonic                                                              251±3ns
[ 62.35%] ··· Running indexing.MultiIndexing.time_multiindex_get_indexer                                                2.08±0.08ms
[ 62.65%] ··· Running indexing.MultiIndexing.time_multiindex_large_get_loc                                                  256±6μs
[ 62.95%] ··· Running indexing.MultiIndexing.time_multiindex_large_get_loc_warm                                             310±6ms
[ 63.25%] ··· Running indexing.MultiIndexing.time_multiindex_med_get_loc                                                 4.40±0.1μs
[ 63.55%] ··· Running indexing.MultiIndexing.time_multiindex_med_get_loc_warm                                           4.23±0.02ms
[ 63.86%] ··· Running indexing.MultiIndexing.time_multiindex_slicers                                                    5.56±0.04ms
[ 64.16%] ··· Running indexing.MultiIndexing.time_multiindex_small_get_loc_warm                                         4.30±0.06ms
[ 64.46%] ··· Running indexing.MultiIndexing.time_multiindex_string_get_loc                                             4.13±0.03μs
[ 64.76%] ··· Running indexing.MultiIndexing.time_remove_unused_levels                                                      404±6μs
[ 65.06%] ··· Running indexing.MultiIndexing.time_series_xs_mi_ix                                                           273±4μs
[ 65.36%] ··· Running indexing.PanelIndexing.time_subset                                                                   935±10μs
[ 65.66%] ··· Running indexing.StringIndexing.time_get_value                                                              390±0.3ms
[ 65.96%] ··· Running indexing.StringIndexing.time_getitem_label_slice                                                     366±10ms
[ 66.27%] ··· Running indexing.StringIndexing.time_getitem_pos_slice                                                       53.8±1μs
[ 66.57%] ··· Running inference.DtypeInfer.time_timedelta64_1                                                            61.3±0.4ms
[ 66.87%] ··· Running inference.DtypeInfer.time_timedelta64_2                                                           10.1±0.05ms
[ 67.17%] ··· Running period.period_standard_indexing.time_align                                                            946±9μs
[ 67.47%] ··· Running period.period_standard_indexing.time_get_loc                                                       10.4±0.4μs
[ 67.77%] ··· Running period.period_standard_indexing.time_intersection                                                    194±10μs
[ 68.07%] ··· Running period.period_standard_indexing.time_series_loc                                                    66.3±0.4μs
[ 68.37%] ··· Running period.period_standard_indexing.time_shallow_copy                                                 8.78±0.05μs
[ 68.67%] ··· Running period.period_standard_indexing.time_shape                                                            442±4ns
[ 68.98%] ··· Running reindex.Reindexing.time_reindex_columns                                                               507±4μs
[ 69.28%] ··· Running reindex.Reindexing.time_reindex_dates                                                                 278±1μs
[ 69.58%] ··· Running reindex.Reindexing.time_reindex_multiindex                                                            185±3ms
[ 69.88%] ··· Running replace.replace_convert.time_replace_frame_timedelta                                                  415±4ms
[ 70.18%] ··· Running replace.replace_convert.time_replace_series_timedelta                                                 261±1ms
[ 70.48%] ··· Running timedelta.DatetimeAccessor.time_dt_accessor                                                        26.3±0.2μs
[ 70.78%] ··· Running timedelta.ToTimedelta.time_convert_coerce                                                          58.3±0.2ms
[ 71.08%] ··· Running timedelta.ToTimedelta.time_convert_ignore                                                          57.6±0.8ms
[ 71.39%] ··· Running timedelta.ToTimedelta.time_convert_int                                                                119±1μs
[ 71.69%] ··· Running timedelta.ToTimedelta.time_convert_string                                                         16.2±0.08ms
[ 71.99%] ··· Running timedelta.ToTimedelta.time_convert_string_seconds                                                  9.86±0.1ms
[ 72.29%] ··· Running timeseries.AsOf.time_asof                                                                          6.67±0.1ms
[ 72.59%] ··· Running timeseries.AsOf.time_asof_nan                                                                      6.50±0.2ms
[ 72.89%] ··· Running timeseries.AsOf.time_asof_nan_single                                                              3.27±0.03ms
[ 73.19%] ··· Running timeseries.AsOf.time_asof_single                                                                   29.1±0.4μs
[ 73.49%] ··· Running timeseries.AsOf.time_asof_single_early                                                             23.3±0.3μs
[ 73.80%] ··· Running timeseries.AsOfDataFrame.time_asof                                                                 34.6±0.8ms
[ 74.10%] ··· Running timeseries.AsOfDataFrame.time_asof_nan                                                             40.2±0.5ms
[ 74.40%] ··· Running timeseries.AsOfDataFrame.time_asof_nan_single                                                      12.1±0.1ms
[ 74.70%] ··· Running timeseries.AsOfDataFrame.time_asof_single                                                          10.3±0.1ms
[ 75.00%] ··· Running timeseries.AsOfDataFrame.time_asof_single_early                                                      85.7±1μs
[ 75.30%] ··· Running timeseries.DatetimeAccessor.time_dt_accessor                                                       22.2±0.6μs
[ 75.60%] ··· Running timeseries.DatetimeAccessor.time_dt_accessor_normalize                                            5.34±0.09ms
[ 75.90%] ··· Running timeseries.DatetimeIndex.time_add_offset_delta                                                                1.77±0.01ms
[ 76.20%] ··· Running timeseries.DatetimeIndex.time_add_offset_fast                                                                                                              7.22±0.03ms
[ 76.51%] ··· Running timeseries.DatetimeIndex.time_add_offset_slow                                                                                                                 471±10ms
[ 76.81%] ··· Running timeseries.DatetimeIndex.time_add_timedelta                                                                                                                   1.68±0ms
[ 77.11%] ··· Running timeseries.DatetimeIndex.time_dti_factorize                                                                                                                7.44±0.04ms
[ 77.41%] ··· Running timeseries.DatetimeIndex.time_dti_tz_factorize                                                                                                              7.99±0.1ms
[ 77.71%] ··· Running timeseries.DatetimeIndex.time_infer_dst                                                                                                                    2.47±0.06ms
[ 78.01%] ··· Running timeseries.DatetimeIndex.time_infer_freq_business                                                                                                          7.15±0.02ms
[ 78.31%] ··· Running timeseries.DatetimeIndex.time_infer_freq_daily                                                                                                             7.57±0.02ms
[ 78.61%] ··· Running timeseries.DatetimeIndex.time_infer_freq_none                                                                                                              16.7±0.06ms
[ 78.92%] ··· Running timeseries.DatetimeIndex.time_normalize                                                                                                                    3.01±0.06ms
[ 79.22%] ··· Running timeseries.DatetimeIndex.time_reset_index                                                                                                                    356±0.4μs
[ 79.52%] ··· Running timeseries.DatetimeIndex.time_reset_index_tz                                                                                                                  611±80μs
[ 79.82%] ··· Running timeseries.DatetimeIndex.time_timeseries_is_month_start                                                                                                        432±3μs
[ 80.12%] ··· Running timeseries.DatetimeIndex.time_timestamp_tzinfo_cons                                                                                                         10.4±0.3μs
[ 80.42%] ··· Running timeseries.DatetimeIndex.time_unique                                                                                                                         120±0.9μs
[ 80.72%] ··· Running timeseries.Iteration.time_iter_datetimeindex                                                                                                                   653±4ms
[ 81.02%] ··· Running timeseries.Iteration.time_iter_datetimeindex_preexit                                                                                                        11.9±0.1ms
[ 81.33%] ··· Running timeseries.Iteration.time_iter_periodindex                                                                                                                       1.94s
[ 81.63%] ··· Running timeseries.Iteration.time_iter_periodindex_preexit                                                                                                          20.5±0.4ms
[ 81.93%] ··· Running timeseries.Offsets.time_custom_bday_apply                                                                                                                     26.2±2μs
[ 82.23%] ··· Running timeseries.Offsets.time_custom_bday_apply_dt64                                                                                                                27.8±1μs
[ 82.53%] ··· Running timeseries.Offsets.time_custom_bday_cal_decr                                                                                                                40.3±0.9μs
[ 82.83%] ··· Running timeseries.Offsets.time_custom_bday_cal_incr                                                                                                                  35.4±2μs
[ 83.13%] ··· Running timeseries.Offsets.time_custom_bday_cal_incr_n                                                                                                                35.2±1μs
[ 83.43%] ··· Running timeseries.Offsets.time_custom_bday_cal_incr_neg_n                                                                                                          39.8±0.8μs
[ 83.73%] ··· Running timeseries.Offsets.time_custom_bday_decr                                                                                                                    39.2±0.7μs
[ 84.04%] ··· Running timeseries.Offsets.time_custom_bday_incr                                                                                                                    27.8±0.9μs
[ 84.34%] ··· Running timeseries.Offsets.time_custom_bmonthbegin_decr_n                                                                                                              149±6μs
[ 84.64%] ··· Running timeseries.Offsets.time_custom_bmonthbegin_incr_n                                                                                                              171±8μs
[ 84.94%] ··· Running timeseries.Offsets.time_custom_bmonthend_decr_n                                                                                                                186±2μs
[ 85.24%] ··· Running timeseries.Offsets.time_custom_bmonthend_incr                                                                                                                 166±10μs
[ 85.54%] ··· Running timeseries.Offsets.time_custom_bmonthend_incr_n                                                                                                                167±3μs
[ 85.84%] ··· Running timeseries.Offsets.time_timeseries_day_apply                                                                                                                28.6±0.4μs
[ 86.14%] ··· Running timeseries.Offsets.time_timeseries_day_incr                                                                                                                   33.0±1μs
[ 86.45%] ··· Running timeseries.Offsets.time_timeseries_year_apply                                                                                                               12.1±0.4μs
[ 86.75%] ··· Running timeseries.Offsets.time_timeseries_year_incr                                                                                                                  14.8±1μs
[ 87.05%] ··· Running timeseries.ResampleDataFrame.time_max_numpy                                                                                                                2.26±0.06ms
[ 87.35%] ··· Running timeseries.ResampleDataFrame.time_max_string                                                                                                                2.48±0.1ms
[ 87.65%] ··· Running timeseries.ResampleDataFrame.time_mean_numpy                                                                                                               2.22±0.04ms
[ 87.95%] ··· Running timeseries.ResampleDataFrame.time_mean_string                                                                                                               2.03±0.1ms
[ 88.25%] ··· Running timeseries.ResampleDataFrame.time_min_numpy                                                                                                                2.54±0.05ms
[ 88.55%] ··· Running timeseries.ResampleDataFrame.time_min_string                                                                                                                2.41±0.2ms
[ 88.86%] ··· Running timeseries.ResampleSeries.time_1min_5min_mean                                                                                                              1.05±0.02ms
[ 89.16%] ··· Running timeseries.ResampleSeries.time_1min_5min_ohlc                                                                                                              1.09±0.01ms
[ 89.46%] ··· Running timeseries.ResampleSeries.time_period_downsample_mean                                                                                                       11.3±0.1ms
[ 89.76%] ··· Running timeseries.ResampleSeries.time_resample_datetime64                                                                                                         1.69±0.07ms
[ 90.06%] ··· Running timeseries.ResampleSeries.time_timestamp_downsample_mean                                                                                                    4.97±0.2ms
[ 90.36%] ··· Running timeseries.SemiMonthOffset.time_begin_apply                                                                                                                   59.6±2μs
[ 90.66%] ··· Running timeseries.SemiMonthOffset.time_begin_apply_index                                                                                                             526±20ms
[ 90.96%] ··· Running timeseries.SemiMonthOffset.time_begin_decr                                                                                                                    68.3±3μs
[ 91.27%] ··· Running timeseries.SemiMonthOffset.time_begin_decr_n                                                                                                                64.0±0.5μs
[ 91.57%] ··· Running timeseries.SemiMonthOffset.time_begin_decr_rng                                                                                                                 465±3ms
[ 91.87%] ··· Running timeseries.SemiMonthOffset.time_begin_incr                                                                                                                    60.6±3μs
[ 92.17%] ··· Running timeseries.SemiMonthOffset.time_begin_incr_n                                                                                                                  67.7±1μs
[ 92.47%] ··· Running timeseries.SemiMonthOffset.time_begin_incr_rng                                                                                                                 508±4ms
[ 92.77%] ··· Running timeseries.SemiMonthOffset.time_end_apply                                                                                                                     52.2±1μs
[ 93.07%] ··· Running timeseries.SemiMonthOffset.time_end_apply_index                                                                                                                513±9ms
[ 93.37%] ··· Running timeseries.SemiMonthOffset.time_end_decr                                                                                                                      63.9±1μs
[ 93.67%] ··· Running timeseries.SemiMonthOffset.time_end_decr_n                                                                                                                    71.6±4μs
[ 93.98%] ··· Running timeseries.SemiMonthOffset.time_end_decr_rng                                                                                                                  504±10ms
[ 94.28%] ··· Running timeseries.SemiMonthOffset.time_end_incr                                                                                                                      64.0±2μs
[ 94.58%] ··· Running timeseries.SemiMonthOffset.time_end_incr_n                                                                                                                    67.0±3μs
[ 94.88%] ··· Running timeseries.SemiMonthOffset.time_end_incr_rng                                                                                                                   496±5ms
[ 95.18%] ··· Running timeseries.SeriesArithmetic.time_add_offset_delta                                                                                                           3.64±0.2ms
[ 95.48%] ··· Running timeseries.SeriesArithmetic.time_add_offset_fast                                                                                                            8.91±0.2ms
[ 95.78%] ··· Running timeseries.SeriesArithmetic.time_add_offset_slow                                                                                                               468±5ms
[ 96.08%] ··· Running timeseries.TimeDatetimeConverter.time_convert                                                                                                              4.97±0.09ms
[ 96.39%] ··· Running timeseries.TimeSeries.time_add_irregular                                                                                                                    10.5±0.1ms
[ 96.69%] ··· Running timeseries.TimeSeries.time_large_lookup_value                                                                                                              2.07±0.02ms
[ 96.99%] ··· Running timeseries.TimeSeries.time_sort_index_monotonic                                                                                                               64.8±1μs
[ 97.29%] ··· Running timeseries.TimeSeries.time_sort_index_non_monotonic                                                                                                         9.15±0.1ms
[ 97.59%] ··· Running timeseries.TimeSeries.time_timeseries_slice_minutely                                                                                                        63.7±0.2μs
[ 97.89%] ··· Running timeseries.ToDatetime.time_format_YYYYMMDD                                                                                                                 5.04±0.01ms
[ 98.19%] ··· Running timeseries.ToDatetime.time_format_exact                                                                                                                        513±3ms
[ 98.49%] ··· Running timeseries.ToDatetime.time_format_no_exact                                                                                                                     564±6ms
[ 98.80%] ··· Running timeseries.ToDatetime.time_iso8601                                                                                                                         4.00±0.07ms
[ 99.10%] ··· Running timeseries.ToDatetime.time_iso8601_format                                                                                                                  4.05±0.04ms
[ 99.40%] ··· Running timeseries.ToDatetime.time_iso8601_format_no_sep                                                                                                            4.46±0.2ms
[ 99.70%] ··· Running timeseries.ToDatetime.time_iso8601_nosep                                                                                                                    3.97±0.1ms
[100.00%] ··· Running timeseries.ToDatetime.time_iso8601_tz_spaceformat                                                                                                              202±2ms       before           after         ratio
     [f68bf254]       [e369c1fc]
+         202±2ms          223±5ms     1.10  timeseries.ToDatetime.time_iso8601_tz_spaceformat
-       390±0.3ms          354±3ms     0.91  indexing.StringIndexing.time_get_value
-      10.4±0.3μs         9.41±0μs     0.90  timeseries.DatetimeIndex.time_timestamp_tzinfo_cons
-        67.0±3μs         60.3±1μs     0.90  timeseries.SemiMonthOffset.time_end_incr_n
-        475±10μs          423±5μs     0.89  indexing.Int64Indexing.time_getitem_list_like
-     2.54±0.05ms      2.23±0.04ms     0.88  timeseries.ResampleDataFrame.time_min_numpy
-        67.7±1μs       59.3±0.9μs     0.88  timeseries.SemiMonthOffset.time_begin_incr_n
-      39.8±0.8μs       34.3±0.4μs     0.86  timeseries.Offsets.time_custom_bday_cal_incr_neg_n
-     2.22±0.04ms      1.91±0.02ms     0.86  timeseries.ResampleDataFrame.time_mean_numpy
-        59.6±2μs       51.4±0.5μs     0.86  timeseries.SemiMonthOffset.time_begin_apply
-        26.2±2μs       22.5±0.2μs     0.86  timeseries.Offsets.time_custom_bday_apply
-        219±10μs          188±2μs     0.86  indexing.DataFrameIndexing.time_iloc_dups
-       120±0.9μs        103±0.1μs     0.86  timeseries.DatetimeIndex.time_unique
-      39.2±0.7μs       33.4±0.4μs     0.85  timeseries.Offsets.time_custom_bday_decr
-        35.2±1μs       29.9±0.5μs     0.85  timeseries.Offsets.time_custom_bday_cal_incr_n
-         564±6ms          479±6ms     0.85  timeseries.ToDatetime.time_format_no_exact
-        454±20μs          355±3μs     0.78  indexing.Int64Indexing.time_loc_list_like
-         185±3ms       74.8±0.4ms     0.40  reindex.Reindexing.time_reindex_multiindex

SOME BENCHMARKS HAVE CHANGED SIGNIFICANTLY.

@WillAyd WillAyd force-pushed the td-speedup branch 2 times, most recently from 9003258 to 1be6911 Compare November 11, 2017 05:11
@jreback
Copy link
Contributor

jreback commented Nov 11, 2017

your new asv did not appear to run

@jreback
Copy link
Contributor

jreback commented Nov 11, 2017

you don't need to post the entire run, just the changed benches.

@codecov
Copy link

codecov bot commented Nov 11, 2017

Codecov Report

Merging #18225 into master will decrease coverage by 0.04%.
The diff coverage is 100%.

Impacted file tree graph

@@            Coverage Diff             @@
##           master   #18225      +/-   ##
==========================================
- Coverage   91.42%   91.38%   -0.05%     
==========================================
  Files         163      163              
  Lines       50068    50065       -3     
==========================================
- Hits        45776    45753      -23     
- Misses       4292     4312      +20
Flag Coverage Δ
#multiple 89.19% <100%> (-0.03%) ⬇️
#single 40.35% <0%> (-0.06%) ⬇️
Impacted Files Coverage Δ
pandas/core/indexes/timedeltas.py 91.12% <100%> (-0.06%) ⬇️
pandas/io/gbq.py 25% <0%> (-58.34%) ⬇️
pandas/plotting/_converter.py 63.38% <0%> (-1.82%) ⬇️
pandas/core/frame.py 97.8% <0%> (-0.1%) ⬇️
pandas/core/indexes/datetimes.py 95.48% <0%> (+0.09%) ⬆️

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update f68bf25...3c5d782. Read the comment docs.

@codecov
Copy link

codecov bot commented Nov 11, 2017

Codecov Report

❗ No coverage uploaded for pull request base (master@fbe15d0). Click here to learn what that means.
The diff coverage is 100%.

Impacted file tree graph

@@            Coverage Diff            @@
##             master   #18225   +/-   ##
=========================================
  Coverage          ?   91.38%           
=========================================
  Files             ?      163           
  Lines             ?    50065           
  Branches          ?        0           
=========================================
  Hits              ?    45753           
  Misses            ?     4312           
  Partials          ?        0
Flag Coverage Δ
#multiple 89.19% <100%> (?)
#single 40.35% <0%> (?)
Impacted Files Coverage Δ
pandas/core/indexes/timedeltas.py 91.12% <100%> (ø)

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update fbe15d0...08a13fb. Read the comment docs.

Copy link
Contributor

@jreback jreback left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looks pretty good. some comments.


def timedelta_seconds(self):
self.td.seconds

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think these need to have time_ leading the name

@@ -70,7 +70,7 @@ Performance Improvements
~~~~~~~~~~~~~~~~~~~~~~~~

- Indexers on Series or DataFrame no longer create a reference cycle (:issue:`17956`)
-
- Vectorized Timedelta property access (:issue:`18092`)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

be a bit more informative here

@@ -39,16 +39,10 @@

def _field_accessor(name, alias, docstring=None):
def f(self):
values = self.asi8
result = libts.get_timedelta_field(values, alias)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

import this from tslibs.timedeltas directly

@@ -92,7 +92,7 @@ from tslibs.timezones cimport (
get_dst_info)
from tslibs.fields import (
get_date_name_field, get_start_end_field, get_date_field,
build_field_sarray)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you don't need this import, see below

@jreback jreback added Performance Memory or execution speed performance Timedelta Timedelta data type labels Nov 11, 2017
@WillAyd
Copy link
Member Author

WillAyd commented Nov 11, 2017

Changes made. See below for sample benchmark run.

As far as the increase, on some runs microseconds failed, while other runs nanoseconds failed. There was always one or the other. I think it has to do with some overhead in moving the computations out of timedeltas.pyx into np_datetimes.c but will report back with what I find

before        after         ratio
+188±1ns       210±2ns       1.12  timedelta.TimedeltaProperties.time_timedelta_microseconds
-658±4ms      1.65±0.05ms    0.00  timedelta.DatetimeAccessor.time_timedelta_dt_accessor_microseconds
-695±4ms      1.63±0.05ms    0.00  timedelta.DatetimeAccessor.time_timedelta_dt_accessor_seconds
-684±4ms      1.59±0.01ms    0.00  timedelta.DatetimeAccessor.time_timedelta_dt_accessor_nanoseconds
-681±4ms      1.57±0.02ms    0.00  timedelta.DatetimeAccessor.time_timedelta_dt_accessor_days

@jbrockmendel
Copy link
Member

This is nice. Is the datetime.c bit the same as the numpy version? Can any of it be cdef externed from numpy instead of implemented directly?

@WillAyd WillAyd force-pushed the td-speedup branch 2 times, most recently from 35cb876 to fb543ec Compare November 11, 2017 16:26
@WillAyd
Copy link
Member Author

WillAyd commented Nov 11, 2017

I didn't see any method for converting a timedelta to a timedeltastruct in numpy's datetime.c

FWIW I noticed some of the Timedelta properties defined in timedelta.pyx (namely days, seconds and microseconds) are superfluous as they already defined in Cython's source. Do you think it's worth removing them from pandas as part of this?

@jreback jreback added this to the 0.22.0 milestone Nov 12, 2017
@jreback
Copy link
Contributor

jreback commented Nov 12, 2017

@WillAyd

this looks good, just rebase on master.

FWIW I noticed some of the Timedelta properties defined in timedelta.pyx (namely days, seconds and microseconds) are superfluous as they already defined in Cython's source. Do you think it's worth removing them from pandas as part of this?

I think you could do this (in a followup). The reason to leave them is that we have a consistent doc-string, and then future readers are not wondering where the 'missing' methods are. It might be a slight perf boost (though not as much as @jbrockmendel got with microseconds on Timestamp).

So if you want to attack that would be great. (but in a followup).

@WillAyd
Copy link
Member Author

WillAyd commented Nov 12, 2017

@jreback rebased

@jreback
Copy link
Contributor

jreback commented Nov 12, 2017

thanks @WillAyd very nice. keep em coming!

@WillAyd WillAyd deleted the td-speedup branch November 12, 2017 18:03
@jbrockmendel
Copy link
Member

np_datetime.c has a can_cast_timedelta64_units that is apparently never used. I don't see it in the diff for this PR. Has it always been there?

@WillAyd
Copy link
Member Author

WillAyd commented Nov 15, 2017

I see it dating back to the start of 2012 when I believe the file was created in 098ce73

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Performance Memory or execution speed performance Timedelta Timedelta data type
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Pandas conversion of Timedelta is very slow
3 participants