python-3.x - 将时间戳转换为日期到Python中的多列

标签 python-3.x pandas datetime

我想将两个时间戳列 start_dateend_date 转换为普通日期列:

   id     start_date       end_date
0   1  1578448800000  1583632800000
1   2  1582164000000  1582250400000
2   3  1582509600000  1582596000000
3   4  1583373600000  1588557600000
4   5  1582509600000  1582596000000
5   6  1582164000000  1582250400000
6   7  1581040800000  1586224800000
7   8  1582423200000  1582509600000
8   9  1583287200000  1583373600000

以下代码适用于一个时间戳,但我如何将其应用于这两列? 感谢您的热心帮助。

import datetime
timestamp = datetime.datetime.fromtimestamp(1500000000)
print(timestamp.strftime('%Y-%m-%d %H:%M:%S'))

输出:

2017-07-14 10:40:00

我还尝试使用 pd.to_datetime(df['start_date']/1000).apply(lambda x: x.date()) ,但结果不正确。

0    1970-01-01
1    1970-01-01
2    1970-01-01
3    1970-01-01
4    1970-01-01
5    1970-01-01
6    1970-01-01
7    1970-01-01
8    1970-01-01

最佳答案

使用DataFrame.apply包含列名称列表和 to_datetime带参数unit='ms':

cols = ['start_date', 'end_date']
df[cols] = df[cols].apply(pd.to_datetime, unit='ms')
print (df)
   id          start_date            end_date
0   1 2020-01-08 02:00:00 2020-03-08 02:00:00
1   2 2020-02-20 02:00:00 2020-02-21 02:00:00
2   3 2020-02-24 02:00:00 2020-02-25 02:00:00
3   4 2020-03-05 02:00:00 2020-05-04 02:00:00
4   5 2020-02-24 02:00:00 2020-02-25 02:00:00
5   6 2020-02-20 02:00:00 2020-02-21 02:00:00
6   7 2020-02-07 02:00:00 2020-04-07 02:00:00
7   8 2020-02-23 02:00:00 2020-02-24 02:00:00
8   9 2020-03-04 02:00:00 2020-03-05 02:00:00

编辑:对于日期,添加 lambda 函数 Series.dt.date :

cols = ['start_date', 'end_date']
df[cols] = df[cols].apply(lambda x: pd.to_datetime(x, unit='ms').dt.date)
print (df)
   id  start_date    end_date
0   1  2020-01-08  2020-03-08
1   2  2020-02-20  2020-02-21
2   3  2020-02-24  2020-02-25
3   4  2020-03-05  2020-05-04
4   5  2020-02-24  2020-02-25
5   6  2020-02-20  2020-02-21
6   7  2020-02-07  2020-04-07
7   8  2020-02-23  2020-02-24
8   9  2020-03-04  2020-03-05

或者单独转换每一列:

df['start_date'] = pd.to_datetime(df['start_date'], unit='ms')
df['end_date'] = pd.to_datetime(df['end_date'], unit='ms')
print (df)
   id          start_date            end_date
0   1 2020-01-08 02:00:00 2020-03-08 02:00:00
1   2 2020-02-20 02:00:00 2020-02-21 02:00:00
2   3 2020-02-24 02:00:00 2020-02-25 02:00:00
3   4 2020-03-05 02:00:00 2020-05-04 02:00:00
4   5 2020-02-24 02:00:00 2020-02-25 02:00:00
5   6 2020-02-20 02:00:00 2020-02-21 02:00:00
6   7 2020-02-07 02:00:00 2020-04-07 02:00:00
7   8 2020-02-23 02:00:00 2020-02-24 02:00:00
8   9 2020-03-04 02:00:00 2020-03-05 02:00:00

对于日期:

df['start_date'] = pd.to_datetime(df['start_date'], unit='ms').dt.date
df['end_date'] = pd.to_datetime(df['end_date'], unit='ms').dt.date

关于python-3.x - 将时间戳转换为日期到Python中的多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60318934/

相关文章:

python - 缺少 datetime.time.__sub__?

javascript - HighStock 图表中纪元日期时间未正确显示

python - 如何在Python中选择性地深复制?

python - Matplotlib 3D Surface 缺少 1 个必需的位置参数 : 'Z'

Python - 如何有效地迭代字典的子集?

python - Pandas Dataframe 按列分组

c# - 是否有存储和解析日历日期重复字符串的标准?

python - 如何使对象正确可散列?

Python 惰性枚举

python - pd.DataFrame(数据,列= [])。如何传递带有嵌套字典的数据?