【问题标题】:Replacing a pandas dataframe column替换熊猫数据框列
【发布时间】:2017-07-06 03:53:41
【问题描述】:

我有一些将数据拉入熊猫数据框的代码。

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 模块?)以及如何在保存到文件之前用新的日期时间覆盖日期列?我尝试了几种方法,但似乎都没有给我祝你好运..

【问题讨论】:

  • 您是否尝试过使用 pandas 解决方案? pd.to_datetime(arg)
  • 这是一个很棒的小解决方案,我完全赞成使用一个衬垫。真的很好谢谢。然而,这似乎给了我输出“1970-01-01 00:00:01.499155200”?哪个还附有邮票?您也没有回答我现在如何替换我的日期列并将其注入数据框中,然后再将其保存下来!
  • 我建议您再看看@MaxU 的答案。它是矢量化的,至少值得你投票。

标签: python pandas


【解决方案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 文档中错过了它,我会很高兴听到这种方法。

【讨论】:

  • 两行..绝对精彩!太感谢了!一定要喜欢 python 和它拥有的伟大社区!
【解决方案2】:

试试这个:

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

【讨论】:

    【解决方案3】:

    正如@Vinicius Aguiar 在评论中所说,你也可以使用pd.to_datetime()

    df['date'] = pd.to_datetime(df['date']).dt.strftime('%Y-%m-%d %H:%M:%S')
    

    【讨论】:

      猜你喜欢
      • 2022-06-24
      • 1970-01-01
      • 2022-01-11
      • 2013-02-04
      • 2017-04-11
      • 2022-08-11
      • 2018-10-23
      • 2018-08-16
      • 1970-01-01
      相关资源
      最近更新 更多