如何将数据框日期转换为浮点数?

How to convert dataframe dates into floating point numbers?

我正在尝试使用 pandas 从电子表格导入数据框,然后对其列执行 numpy 操作。问题是我获得了标题中指定的错误:TypeError:无法在 mixed-types 上使用非 np.nan 值 进行就地布尔设置。 这样做的原因是我的数据框包含一个带有日期的列,例如:

  ID         Date         
519457    25/02/2020 10:03    
519462    25/02/2020 10:07     
519468    25/02/2020 10:12
 ...           ...

而 Numpy 要求格式为浮点数,因此:

  ID         Date         
519457    43886.41875     
519462    43886.42153     
519468    43886.425 
 ...         ...      

如何在不修改电子表格本身的情况下进行此更改? 我在论坛上看到很多post问the opposite, and asking , and read the docs on xlrd.xldate,但是都没有做到这一点,看起来很简单。 我确定以前处理过这种问题,但一直没能找到类似的post。

我使用的代码如下

xls=pd.ExcelFile(r'/home/.../TwoData.xlsx')
xls.sheet_names
df=pd.read_excel(xls,"Hoja 1")

df["E_t"]=df["Date"].diff()

非常感谢任何帮助或指点!

PS。我见过需要计算想要获得的确切数字的解决方案,但由于数据帧的大小,在这种情况下这是不可能的。

我认为你需要:

#
@rewritten to vectorized solution
def excel_date(date1):
    temp = pd.Timestamp(1899, 12, 30)    # Note, not 31st Dec but 30th!
    delta = date1 - temp
    return (delta.dt.days) + (delta.dt.seconds) / 86400

df["Date"] = pd.to_datetime(df["Date"]).pipe(excel_date)

print (df)
       ID          Date
0  519457  43886.418750
1  519462  43886.421528
2  519468  43886.425000

您可以将日期转换为 Unix 时间戳。在 python 中,如果您有 UTC 格式的 datetime 对象,您可以 timestamp() 获取 UTC 时间戳。此函数 returns 自该 datetime 对象的纪元以来的时间。

请看下面的例子-

from datetime import timezone
dt = datetime(2015, 10, 19)
timestamp = dt.replace(tzinfo=timezone.utc).timestamp()
print(timestamp)

1445212800.0

请查看 datetime 模块以获取更多信息。