我遇到麻烦我有两个日期列,它们都以float64 dtype形式出现。我从中提取的文件是一个sas7bdat文件,我遇到的问题主要是以负值形式出现的值。
所以例如我的值看起来像这样:-21914和我的正值看起来像这个20797.我现在使用下面的代码,似乎正在转换正值,但是负值有问题某种原因。
df['DATE'] = (df['DATE'])
df['DATE'] = pd.to_timedelta(df['DATE'], unit='D') + pd.Timestamp('1960-1-1')
df['DATE'] = pd.to_datetime(df['DATE'], format='%d%b%Y')
就像我上面提到的那样,这可以很好地转换正值,但是负值会为每个值提供相同的日期,即使某些负值不同。我认为这可能是负号的问题所以我改变了我的代码并开始使用它。
df['DATE'] = abs(df['DATE'])
df['DATE'] = (df['DATE'])
df['DATE'] = pd.to_timedelta(df['DATE'], unit='D') + pd.Timestamp('1960-1-1')
df['DATE'] = pd.to_datetime(df['DATE'], format='%d%b%Y')
我将所有的float64值转换为绝对值,这会将负值变为正值,而我得到的负值的日期不同,现在是正值,但所有这些日期仍然与它们时的情况完全相同他们是消极的。我现在正在寻求建议,因为我似乎无法解决这个小问题。
答案 0 :(得分:0)
发布这个简单例子的输出:
import pandas as pd
import numpy as np
x = np.array([-10.0, -5.0, 0.0, 5.0, 10.0])
df = pd.DataFrame(x, index=range(0,10,2), columns=['DATE'])
df['DATE'] = (df['DATE'])
df['DATE'] = pd.to_timedelta(df['DATE'], unit='D') + pd.Timestamp('1960-1-1')
print(df['DATE'])
应该是
0 1959-12-22
2 1959-12-27
4 1960-01-01
6 1960-01-06
8 1960-01-11
Name: DATE, dtype: datetime64[ns]