[英]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
你跑了
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.