我需要在日期上合并2个pandas数据帧,但它们目前有不同的日期类型。 1是时间戳(从excel导入),另一个是datetime.date
。
有什么建议吗?
我已尝试pd.to_datetime().date
,但这仅适用于单个项目(例如df.ix[0,0]
),它不会让我申请整个系列(例如df['mydates']
)或数据帧。
答案 0 :(得分:13)
我从一位同事那里得到了一些帮助。
这似乎解决了上面发布的问题
pd.to_datetime(df['mydates']).apply(lambda x: x.date())
答案 1 :(得分:10)
比上面简单得多:
df['mydates'].dt.date
答案 2 :(得分:5)
对我来说这可行:
from datetime import datetime
df[ts] = [datetime.fromtimestamp(x) for x in df[ts]]
答案 3 :(得分:1)
另一个问题被标记为指向此问题,但它不包含此答案,这似乎是最简单的方法(也许在发布/回答此问题时此方法尚不存在):
pandas文档显示了一种pandas.Timestamp.to_pydatetime
方法,用于“将Timestamp对象转换为本地Python datetime对象”。
答案 4 :(得分:0)
如果您需要datetime.date
个对象...,请使用.date
Timestamp
属性了解它们
pd.to_datetime(df['mydates']).date
答案 5 :(得分:0)
当我遇到类似问题时,我发现以下方法最有效。例如,数据框df
在列ts
中具有一系列时间戳。
df.ts.apply(lambda x: pd.datetime.fromtimestamp(x).date())
进行转换,您可以省略.date()
后缀的日期时间。然后更改数据框上的列。像这样...
df.loc[:, 'ts'] = df.ts.apply(lambda x: pd.datetime.fromtimestamp(x).date())
答案 6 :(得分:0)
假设时间列采用时间戳整数毫秒格式
1天= 86400000毫秒
您在这里:
day_divider = 86400000
df['time'] = df['time'].values.astype(dtype='datetime64[ms]') # for msec format
df['time'] = (df['time']/day_divider).values.astype(dtype='datetime64[D]') # for day format