我有一些代码将数据拉入pandas数据帧。
df = df[["date","high","low","open","close"]]
数据如下所示:
date high low open close
0 1499140800 2615.390000 2600.000000 2610.58000 2603.00000
1 1499155200 2618.785462 2582.002100 2615.00000 2607.00000
2 1499169600 2617.674406 2550.314214 2607.00000 2554.55010
3 1499184000 2572.962113 2519.967440 2554.55010 2519.96744
4 1499198400 2595.654622 2516.000000 2519.96744 2580.00000
我想将unix时间戳列转换为实际的日期时间。在我的代码中,我必须先导入
from datetime import datetime
当我尝试使用datetime.datetime进行转换时,它似乎给了我一个错误。我不能只使用import datetime
,因为这会让我在之前的导入中出错,这是我需要的。所以我的问题是双重的。如何将时间戳转换为日期时间(可能不使用datetime模块?),如何在保存到文件之前用新的日期时间覆盖日期列?我尝试了几种方法,但似乎没有给我好运..
答案 0 :(得分:1)
将示例数据复制到文件in.csv
代码示例后面有一个解释。
>>> import pandas as pd
>>> df = pd.read_csv('in.csv')
>>> df
date high low open close
0 1499140800 2615.390000 2600.000000 2610.58000 2603.00000
1 1499155200 2618.785462 2582.002100 2615.00000 2607.00000
2 1499169600 2617.674406 2550.314214 2607.00000 2554.55010
3 1499184000 2572.962113 2519.967440 2554.55010 2519.96744
4 1499198400 2595.654622 2516.000000 2519.96744 2580.00000
>>> from datetime import datetime
>>> converted = df['date'].apply(datetime.fromtimestamp)
>>> df['date'] = converted
>>> df
date high low open close
0 2017-07-03 22:00:00 2615.390000 2600.000000 2610.58000 2603.00000
1 2017-07-04 02:00:00 2618.785462 2582.002100 2615.00000 2607.00000
2 2017-07-04 06:00:00 2617.674406 2550.314214 2607.00000 2554.55010
3 2017-07-04 10:00:00 2572.962113 2519.967440 2554.55010 2519.96744
4 2017-07-04 14:00:00 2595.654622 2516.000000 2519.96744 2580.00000
你跑了
from datetime import datetime
并希望稍后将datetime.datetime
用作函数,但您实际上已从datetime
模块导入datetime
类(这就是将导入更改为datetime
的原因没有帮助)。有关详情,请参阅此问题:Converting unix timestamp string to readable date in Python
所以你只需要导入datetime类并使用它的fromtimestamp
函数
为此,一种常见的方法是apply
一个函数(在本例中为fromtimestamp
)到列(一个Pandas Series
),然后覆盖旧列中的DataFrame。
我不知道有哪种方法可以修改列,但如果我在Pandas文档中错过了它,我会很高兴听到这种方法。
答案 1 :(得分:1)
试试这个:
In [2]: df
Out[2]:
date high low open close
0 1499140800 2615.390000 2600.000000 2610.58000 2603.00000
1 1499155200 2618.785462 2582.002100 2615.00000 2607.00000
2 1499169600 2617.674406 2550.314214 2607.00000 2554.55010
3 1499184000 2572.962113 2519.967440 2554.55010 2519.96744
4 1499198400 2595.654622 2516.000000 2519.96744 2580.00000
In [3]: df['date'] = pd.to_datetime(df['date'], unit='s')
In [4]: df
Out[4]:
date high low open close
0 2017-07-04 04:00:00 2615.390000 2600.000000 2610.58000 2603.00000
1 2017-07-04 08:00:00 2618.785462 2582.002100 2615.00000 2607.00000
2 2017-07-04 12:00:00 2617.674406 2550.314214 2607.00000 2554.55010
3 2017-07-04 16:00:00 2572.962113 2519.967440 2554.55010 2519.96744
4 2017-07-04 20:00:00 2595.654622 2516.000000 2519.96744 2580.00000
答案 2 :(得分:0)
正如@Vinicius Aguiar在评论中所说,你也可以使用pd.to_datetime()
。
df['date'] = pd.to_datetime(df['date']).dt.strftime('%Y-%m-%d %H:%M:%S')