替换pandas dataframe列

时间:2017-07-06 03:53:41

标签: python pandas

我有一些代码将数据拉入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模块?),如何在保存到文件之前用新的日期时间覆盖日期列?我尝试了几种方法,但似乎没有给我好运..

3 个答案:

答案 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

将Unix时间戳转换为日期时间

你跑了

from datetime import datetime

并希望稍后将datetime.datetime用作函数,但您实际上已从datetime模块导入datetime类(这就是将导入更改为datetime的原因没有帮助)。有关详情,请参阅此问题:Converting unix timestamp string to readable date in Python

所以你只需要导入datetime类并使用它的fromtimestamp函数

更新DataFrame中的列

为此,一种常见的方法是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')