Как изменить дату и время на числовое отбрасывание 0s в конце [дубликат]

Это действительно зависит от того, что вы подразумеваете под равенством.

Этот метод будет проверять, что два словаря содержат одинаковые ключи с одинаковыми значениями (при условии, что оба словаря используют один и тот же IEqualityComparer & lt; TKey & gt; )

  public bool CompareX & lt; TKey, TValue & gt; (Dictionary & lt; TKey, TValue & gt; dict1, Dictionary & lt; TKey, TValue & gt; dict2) {if (dict1 == dict2)  return true;  if ((dict1 == null) || (dict2 == null)) return false;  if (dict1.Count! = dict2.Count) возвращает false;  var valueComparer = EqualityComparer & lt; TValue & gt; .Default;  foreach (var kvp in dict1) {TValue value2;  if (! dict2.TryGetValue (kvp.Key, out value2)) return false;  if (! valueComparer.Equals (kvp.Value, value2)) return false;  } return true;  }  
19
задан luckyfool 19 April 2013 в 12:09
поделиться

5 ответов

Для этого вам понадобится 0.11 (0.11rc1 отсутствует, окончательная ошибка на следующей неделе)

In [9]: df = DataFrame([ Timestamp('20010101'), Timestamp('20040601') ])

In [10]: df
Out[10]: 
                    0
0 2001-01-01 00:00:00
1 2004-06-01 00:00:00

In [11]: df = DataFrame([ Timestamp('20010101'), 
                          Timestamp('20040601') ],columns=['age'])

In [12]: df
Out[12]: 
                  age
0 2001-01-01 00:00:00
1 2004-06-01 00:00:00

In [13]: df['today'] = Timestamp('20130419')

In [14]: df['diff'] = df['today']-df['age']

In [16]: df['years'] = df['diff'].apply(lambda x: float(x.item().days)/365)

In [17]: df
Out[17]: 
                  age               today                diff      years
0 2001-01-01 00:00:00 2013-04-19 00:00:00 4491 days, 00:00:00  12.304110
1 2004-06-01 00:00:00 2013-04-19 00:00:00 3244 days, 00:00:00   8.887671

Вам нужно, чтобы этот нечетный пример применялся в конце, потому что еще не полная поддержка сканеров timedelta64 [ns] (например, как мы используем Timestamps сейчас для datetime64 [ns], начиная с 0.12)

14
ответ дан Jeff 16 August 2018 в 02:18
поделиться

Не уверен, что вам все еще нужно, но в Pandas 0.14 я обычно использую метод .astype ('timedelta64 [X]') http://pandas.pydata.org/pandas-docs/stable/timeseries. html (преобразование частоты)

df = pd.DataFrame([ pd.Timestamp('20010101'), pd.Timestamp('20040605') ])
df.ix[0]-df.ix[1]

Возвраты:

0   -1251 days
dtype: timedelta64[ns]
(df.ix[0]-df.ix[1]).astype('timedelta64[Y]')

Возвраты:

  0   -4
 dtype: float64

Надеюсь, что это поможет

10
ответ дан Ayrat 16 August 2018 в 02:18
поделиться
  • 1
    Это отлично поработало. Я перешел в D для Y, чтобы получить дни. – fantabolous 5 November 2014 в 02:50
  • 2
    Я просто искал Google и нашел этот вопрос. Моя проблема в том, что я использовал что-то похожее, как ответ Джеффа для моего фреймворка. Тем не менее, у меня есть миллион строк, поэтому применять их довольно медленно. Использование .astype('timedelta64[D]') - способ более быстрый (около 200x) – Eric B 4 May 2017 в 14:44

Давайте укажем, что у вас есть серия pandas с именем time_difference, которая имеет тип numpy.timedelta64 [ns]

. Один способ извлечения только дня (или любого другого желаемого атрибута) заключается в следующем:

just_day = time_difference.apply(lambda x: pd.tslib.Timedelta(x).days)

Эта функция используется, потому что объект numpy.timedelta64 не имеет атрибута 'days'.

5
ответ дан Daniel Gibson 16 August 2018 в 02:18
поделиться

Используя тип Панды Timedelta , доступный с v0.15.0, вы также можете сделать:

In[1]: import pandas as pd
In[2]: df = pd.DataFrame([ pd.Timestamp('20150111'), 
                           pd.Timestamp('20150301') ], columns=['date'])
In[3]: df['today'] = pd.Timestamp('20150315')
In[4]: df
Out[4]: 
        date      today
0 2015-01-11 2015-03-15
1 2015-03-01 2015-03-15

In[5]: (df['today'] - df['date']).dt.days
Out[5]: 
0    63
1    14
dtype: int64
26
ответ дан DanT 16 August 2018 в 02:18
поделиться

Для преобразования любого типа данных в дни просто используйте Timedelta (). days:

pd.Timedelta(1985, unit='Y').days
84494
4
ответ дан luart 16 August 2018 в 02:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: