簡體   English   中英

替換熊貓數據框列

[英]Replacing a pandas dataframe column

我有一些代碼將數據拉入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模塊?),如何在保存到文件之前用新的日期時間覆蓋date列?我嘗試了幾種方法,但似乎都沒有給我運氣好的話..

在將您的示例數據復制到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並沒有幫助)的原因。 有關更多信息,請參見此問題: 在Python中將unix時間戳字符串轉換為可讀日期

因此,您只需要導入datetime類並使用其fromtimestamp函數

更新數據幀中的列

為此,一種常見的方法是apply一個函數(在這種情況下為fromtimestamp )應用於列(Pandas Series ),然后覆蓋DataFrame中的舊列。

我不知道修改列的方法,但是如果我在Pandas文檔中錯過了它,很高興聽到一種方法。

嘗試這個:

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

正如@Vinicius Aguiar在評論中所說,您還可以使用pd.to_datetime()

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM