如何将numpy.datetime64对象转换为datetime.datetime(或Timestamp)?
在以下代码中,我创建了datetime,timestamp和datetime64对象.
import datetime
import numpy as np
import pandas as pd
dt = datetime.datetime(2012, 5, 1)
# A strange way to extract a Timestamp object, there's surely a better way?
ts = pd.DatetimeIndex([dt])[0]
dt64 = np.datetime64(dt)
In [7]: dt
Out[7]: datetime.datetime(2012, 5, 1, 0, 0)
In [8]: ts
Out[8]: <Timestamp: 2012-05-01 00:00:00>
In [9]: dt64
Out[9]: numpy.datetime64('2012-05-01T01:00:00.000000+0100')
Run Code Online (Sandbox Code Playgroud)
注意:从时间戳中获取日期时间很容易:
In [10]: ts.to_datetime()
Out[10]: datetime.datetime(2012, 5, 1, 0, 0)
Run Code Online (Sandbox Code Playgroud)
但是我们如何从()中提取datetime或者?Timestampnumpy.datetime64dt64 …
在dateutil中解析日期后,有没有办法获得"格式".例如:
>>> x = parse("2014-01-01 00:12:12")
datetime.datetime(2014, 1, 1, 0, 12, 12)
x.get_original_string_format()
YYYY-MM-DD HH:MM:SS # %Y-%m-%d %H:%M:%S
# Or, passing the date-string directly
get_original_string_format("2014-01-01 00:12:12")
YYYY-MM-DD HH:MM:SS # %Y-%m-%d %H:%M:%S
Run Code Online (Sandbox Code Playgroud)
更新:我想为这个问题添加一个赏金,看看是否有人可以添加一个相应的答案来获取传递的公共日期字符串的字符串格式.它可以使用,dateutil如果你想,但它没有.希望我们能在这里获得一些创造性的解决方案.
熊猫的内部问题:我一直惊讶地发现了几次,明确传递调用到date_parser内pandas.read_csv导致多慢读取时间比单纯使用infer_datetime_format=True.
为什么是这样?这两个选项之间的时间差异是特定于日期格式的,还是其他因素会影响它们的相对时间?
在下面的例子中,infer_datetime_format=True传递具有指定格式的日期解析器的时间的十分之一.我天真地认为后者会更快,因为它是明确的.
文档注意到,
[如果为True,] pandas将尝试推断列中日期时间字符串的格式,如果可以推断,请切换到更快的解析方法.在某些情况下,这可以将解析速度提高5-10倍.
但是没有给出太多细节,我无法完全通过源头工作.
建立:
from io import StringIO
import numpy as np
import pandas as pd
np.random.seed(444)
dates = pd.date_range('1980', '2018')
df = pd.DataFrame(np.random.randint(0, 100, (len(dates), 2)),
index=dates).add_prefix('col').reset_index()
# Something reproducible to be read back in
buf = StringIO()
df.to_string(buf=buf, index=False)
def read_test(**kwargs):
# Not ideal for .seek() to eat up runtime, but alleviate
# this with more loops than needed in timing below
buf.seek(0)
return …Run Code Online (Sandbox Code Playgroud) 我注意到将NaN值列表转换为集合时出现问题:
import pandas as pd
import numpy as np
x = pd.DataFrame({'a':[None,None]})
x_numeric = pd.to_numeric(x['a']) #converts to numpy.float64
set(x_numeric)
Run Code Online (Sandbox Code Playgroud)
这应该返回{nan}但是返回{nan,nan}.但是,这样做:
set([numpy.nan, numpy.nan])
Run Code Online (Sandbox Code Playgroud)
返回预期的{nan}.前者显然是类numpy.float64,而后者默认是类float.
知道为什么set()不能与numpy.float64 NaN值一起使用吗?我正在使用Pandas版本0.18和Numpy版本1.10.4.