如何将数据框日期转换为浮点数?
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 模块以获取更多信息。
我正在尝试使用 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
我使用的代码如下
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 模块以获取更多信息。