<legend id='CwYkm'><style id='CwYkm'><dir id='CwYkm'><q id='CwYkm'></q></dir></style></legend>

      1. <tfoot id='CwYkm'></tfoot>
        <i id='CwYkm'><tr id='CwYkm'><dt id='CwYkm'><q id='CwYkm'><span id='CwYkm'><b id='CwYkm'><form id='CwYkm'><ins id='CwYkm'></ins><ul id='CwYkm'></ul><sub id='CwYkm'></sub></form><legend id='CwYkm'></legend><bdo id='CwYkm'><pre id='CwYkm'><center id='CwYkm'></center></pre></bdo></b><th id='CwYkm'></th></span></q></dt></tr></i><div id='CwYkm'><tfoot id='CwYkm'></tfoot><dl id='CwYkm'><fieldset id='CwYkm'></fieldset></dl></div>

        <small id='CwYkm'></small><noframes id='CwYkm'>

          <bdo id='CwYkm'></bdo><ul id='CwYkm'></ul>

        Python pandas 通过 dt 访问器有效地将日期时间转换

        时间:2023-09-14
          <tbody id='7gKBp'></tbody>

          <small id='7gKBp'></small><noframes id='7gKBp'>

          • <i id='7gKBp'><tr id='7gKBp'><dt id='7gKBp'><q id='7gKBp'><span id='7gKBp'><b id='7gKBp'><form id='7gKBp'><ins id='7gKBp'></ins><ul id='7gKBp'></ul><sub id='7gKBp'></sub></form><legend id='7gKBp'></legend><bdo id='7gKBp'><pre id='7gKBp'><center id='7gKBp'></center></pre></bdo></b><th id='7gKBp'></th></span></q></dt></tr></i><div id='7gKBp'><tfoot id='7gKBp'></tfoot><dl id='7gKBp'><fieldset id='7gKBp'></fieldset></dl></div>

              <tfoot id='7gKBp'></tfoot>

                  <bdo id='7gKBp'></bdo><ul id='7gKBp'></ul>
                  <legend id='7gKBp'><style id='7gKBp'><dir id='7gKBp'><q id='7gKBp'></q></dir></style></legend>
                  本文介绍了Python pandas 通过 dt 访问器有效地将日期时间转换为时间戳的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

                  问题描述

                  我有一个包含一些(数亿)行的数据框.我想有效地将​​日期时间转换为时间戳.我该怎么做?

                  我的示例df:

                  df = pd.DataFrame(index=pd.DatetimeIndex(start=dt.datetime(2016,1,1,0,0,1),结束=dt.datetime(2016,1,2,0,0,1), 频率='H')).reset_index().rename(columns={'index':'datetime'})df.head()约会时间0 2016-01-01 00:00:011 2016-01-01 01:00:012 2016-01-01 02:00:013 2016-01-01 03:00:014 2016-01-01 04:00:01

                  现在我使用 .apply() 将日期时间逐个转换为时间戳值,但如果我有一些(数亿)行,则需要很长时间(几个小时):

                  df['ts'] = df[['datetime']].apply(lambda x: x[0].timestamp(), axis=1).astype(int)df.head()日期时间 ts0 2016-01-01 00:00:01 14516028011 2016-01-01 01:00:01 14516064012 2016-01-01 02:00:01 14516100013 2016-01-01 03:00:01 14516136014 2016-01-01 04:00:01 1451617201

                  上面的结果就是我想要的.

                  如果我尝试使用 pandas.Series.dt 访问器,则会收到错误消息:

                  df['ts'] = df['datetime'].dt.timestamp

                  <块引用>

                  AttributeError: 'DatetimeProperties' 对象没有属性'时间戳'

                  如果我尝试创建例如.使用 .dt 访问器的日期时间的日期部分比使用 .apply() 快得多:

                  df['date'] = df['datetime'].dt.datedf.head()日期时间 ts 日期0 2016-01-01 00:00:01 1451602801 2016-01-011 2016-01-01 01:00:01 1451606401 2016-01-012 2016-01-01 02:00:01 1451610001 2016-01-013 2016-01-01 03:00:01 1451613601 2016-01-014 2016-01-01 04:00:01 1451617201 2016-01-01

                  我想要类似时间戳的东西...

                  但我不太了解官方文档:它谈到转换为时间戳" 但我没有看到任何时间戳;它只是谈论使用 pd.to_datetime() 转换为日期时间,而不是时间戳...

                  pandas.Timestamp 构造函数也不起作用(返回以下错误):

                  df['ts2'] = pd.Timestamp(df['datetime'])

                  <块引用>

                  TypeError:无法将输入转换为时间戳

                  pandas.Series.to_timestamp 也做出了我想要的完全不同的东西:

                  df['ts3'] = df['datetime'].to_timestampdf.head()日期时间 ts ts30 2016-01-01 00:00:01 1451602801 <绑定方法 Series.to_timestamp of 0 2016...1 2016-01-01 01:00:01 1451606401 <绑定方法 Series.to_timestamp of 0 2016...2 2016-01-01 02:00:01 1451610001 <绑定方法 Series.to_timestamp of 0 2016...3 2016-01-01 03:00:01 1451613601 <绑定方法 Series.to_timestamp of 0 2016...4 2016-01-01 04:00:01 1451617201 <绑定方法 Series.to_timestamp of 0 2016...

                  谢谢!!

                  解决方案

                  我觉得你需要先转换成 numpy array by values 并转换为 int64 - 输出在 ns,所以需要除以10 ** 9:

                  df['ts'] = df.datetime.values.astype(np.int64)//10 ** 9打印 (df)日期时间 ts0 2016-01-01 00:00:01 14516064011 2016-01-01 01:00:01 14516100012 2016-01-01 02:00:01 14516136013 2016-01-01 03:00:01 14516172014 2016-01-01 04:00:01 14516208015 2016-01-01 05:00:01 14516244016 2016-01-01 06:00:01 14516280017 2016-01-01 07:00:01 14516316018 2016-01-01 08:00:01 14516352019 2016-01-01 09:00:01 145163880110 2016-01-01 10:00:01 145164240111 2016-01-01 11:00:01 145164600112 2016-01-01 12:00:01 145164960113 2016-01-01 13:00:01 145165320114 2016-01-01 14:00:01 145165680115 2016-01-01 15:00:01 145166040116 2016-01-01 16:00:01 145166400117 2016-01-01 17:00:01 145166760118 2016-01-01 18:00:01 145167120119 2016-01-01 19:00:01 145167480120 2016-01-01 20:00:01 145167840121 2016-01-01 21:00:01 145168200122 2016-01-01 22:00:01 145168560123 2016-01-01 23:00:01 145168920124 2016-01-02 00:00:01 1451692801

                  to_timestamp 用于将 从周期索引转换为日期时间索引.

                  I have a dataframe with some (hundreds of) million of rows. And I want to convert datetime to timestamp effectively. How can I do it?

                  My sample df:

                  df = pd.DataFrame(index=pd.DatetimeIndex(start=dt.datetime(2016,1,1,0,0,1),
                      end=dt.datetime(2016,1,2,0,0,1), freq='H'))
                      .reset_index().rename(columns={'index':'datetime'})
                  
                  df.head()
                  
                               datetime
                  0 2016-01-01 00:00:01
                  1 2016-01-01 01:00:01
                  2 2016-01-01 02:00:01
                  3 2016-01-01 03:00:01
                  4 2016-01-01 04:00:01
                  

                  Now I convert datetime to timestamp value-by-value with .apply() but it takes a very long time (some hours) if I have some (hundreds of) million rows:

                  df['ts'] = df[['datetime']].apply(lambda x: x[0].timestamp(), axis=1).astype(int)
                  
                  df.head()
                  
                               datetime          ts
                  0 2016-01-01 00:00:01  1451602801
                  1 2016-01-01 01:00:01  1451606401
                  2 2016-01-01 02:00:01  1451610001
                  3 2016-01-01 03:00:01  1451613601
                  4 2016-01-01 04:00:01  1451617201
                  

                  The above result is what I want.

                  If I try to use the .dt accessor of pandas.Series then I get error message:

                  df['ts'] = df['datetime'].dt.timestamp
                  

                  AttributeError: 'DatetimeProperties' object has no attribute 'timestamp'

                  If I try to create eg. the date parts of datetimes with the .dt accessor then it is much more faster then using .apply():

                  df['date'] = df['datetime'].dt.date
                  
                  df.head()
                  
                               datetime          ts        date
                  0 2016-01-01 00:00:01  1451602801  2016-01-01
                  1 2016-01-01 01:00:01  1451606401  2016-01-01
                  2 2016-01-01 02:00:01  1451610001  2016-01-01
                  3 2016-01-01 03:00:01  1451613601  2016-01-01
                  4 2016-01-01 04:00:01  1451617201  2016-01-01
                  

                  I want something similar with timestamps...

                  But I don't really understand the official documentation: it talks about "Converting to Timestamps" but I don't see any timestamps there; it just talks about converting to datetime with pd.to_datetime() but not to timestamp...

                  pandas.Timestamp constructor also doesn't work (returns with the below error):

                  df['ts2'] = pd.Timestamp(df['datetime'])
                  

                  TypeError: Cannot convert input to Timestamp

                  pandas.Series.to_timestamp also makes something totally different that I want:

                  df['ts3'] = df['datetime'].to_timestamp
                  
                  df.head()
                  
                               datetime          ts                                                ts3
                  0 2016-01-01 00:00:01  1451602801  <bound method Series.to_timestamp of 0    2016...
                  1 2016-01-01 01:00:01  1451606401  <bound method Series.to_timestamp of 0    2016...
                  2 2016-01-01 02:00:01  1451610001  <bound method Series.to_timestamp of 0    2016...
                  3 2016-01-01 03:00:01  1451613601  <bound method Series.to_timestamp of 0    2016...
                  4 2016-01-01 04:00:01  1451617201  <bound method Series.to_timestamp of 0    2016...
                  

                  Thank you!!

                  解决方案

                  I think you need convert first to numpy array by values and cast to int64 - output is in ns, so need divide by 10 ** 9:

                  df['ts'] = df.datetime.values.astype(np.int64) // 10 ** 9
                  print (df)
                                datetime          ts
                  0  2016-01-01 00:00:01  1451606401
                  1  2016-01-01 01:00:01  1451610001
                  2  2016-01-01 02:00:01  1451613601
                  3  2016-01-01 03:00:01  1451617201
                  4  2016-01-01 04:00:01  1451620801
                  5  2016-01-01 05:00:01  1451624401
                  6  2016-01-01 06:00:01  1451628001
                  7  2016-01-01 07:00:01  1451631601
                  8  2016-01-01 08:00:01  1451635201
                  9  2016-01-01 09:00:01  1451638801
                  10 2016-01-01 10:00:01  1451642401
                  11 2016-01-01 11:00:01  1451646001
                  12 2016-01-01 12:00:01  1451649601
                  13 2016-01-01 13:00:01  1451653201
                  14 2016-01-01 14:00:01  1451656801
                  15 2016-01-01 15:00:01  1451660401
                  16 2016-01-01 16:00:01  1451664001
                  17 2016-01-01 17:00:01  1451667601
                  18 2016-01-01 18:00:01  1451671201
                  19 2016-01-01 19:00:01  1451674801
                  20 2016-01-01 20:00:01  1451678401
                  21 2016-01-01 21:00:01  1451682001
                  22 2016-01-01 22:00:01  1451685601
                  23 2016-01-01 23:00:01  1451689201
                  24 2016-01-02 00:00:01  1451692801
                  

                  to_timestamp is used for converting from period to datetime index.

                  这篇关于Python pandas 通过 dt 访问器有效地将日期时间转换为时间戳的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!

                    • <bdo id='JwqNH'></bdo><ul id='JwqNH'></ul>

                      <i id='JwqNH'><tr id='JwqNH'><dt id='JwqNH'><q id='JwqNH'><span id='JwqNH'><b id='JwqNH'><form id='JwqNH'><ins id='JwqNH'></ins><ul id='JwqNH'></ul><sub id='JwqNH'></sub></form><legend id='JwqNH'></legend><bdo id='JwqNH'><pre id='JwqNH'><center id='JwqNH'></center></pre></bdo></b><th id='JwqNH'></th></span></q></dt></tr></i><div id='JwqNH'><tfoot id='JwqNH'></tfoot><dl id='JwqNH'><fieldset id='JwqNH'></fieldset></dl></div>
                        1. <legend id='JwqNH'><style id='JwqNH'><dir id='JwqNH'><q id='JwqNH'></q></dir></style></legend>
                            <tbody id='JwqNH'></tbody>
                          <tfoot id='JwqNH'></tfoot>

                          <small id='JwqNH'></small><noframes id='JwqNH'>