将时间戳列数据转换为日期时间时价格列丢失

时间:2021-07-10 06:31:11

标签: python pandas dataframe

我正在为价格分析准备数据,因此我创建了这段代码,用于从 Coingecko API 中提取价格信息、对所需列进行排序、更改标题名称并转换日期。

我面临的当前块是一旦我将时间戳转换为日期时间,我就会丢失价格列,那么我如何将它与新的日期格式一起恢复?

import pandas as pd
from pycoingecko import CoinGeckoAPI

cg = CoinGeckoAPI()
response = cg.get_coin_market_chart_by_id(id='bitcoin',
                                            vs_currency='usd',
                                            days='90',
                                            interval='daily')
 
df1 = pd.json_normalize(response)

df2 = df1.explode('prices')
df2 = pd.DataFrame(df2['prices'].to_list(), columns=['dates','prices'])
df2 .rename(columns={'dates': 'ds','prices': 'y'}, inplace=True)
print('DATAFRAME EXPLODED: ',df2)

df2 = df2['ds'].mul(1e6).apply(pd.Timestamp)
df2 = pd.DataFrame(df2.to_list(), columns=['ds','y'])

df3 = df2.tail()
print('DATAFRAME TAILED: ',df3)

数据框爆炸:

         ds             y 

 0  1618185600000  59988.020959 
 1  1618272000000  59911.020595 
 2  1618358400000  63576.676041 
 3  1618444800000  62807.123233 
 4  1618531200000  63179.772446 
 ..            ...           ... 
 86 1625616000000  34149.989815 
 87 1625702400000  33932.254638 
 88 1625788800000  32933.578199 
 89 1625875200000  33971.297750 
 90 1625895274000  33738.909080

 [91 rows x 2 columns] 

数据帧尾:

86   2021-07-07 00:00:00 
87   2021-07-08 00:00:00 
88   2021-07-09 00:00:00 
89   2021-07-10 00:00:00 
90   2021-07-10 05:34:34 

Name: ds, type: datetime64[ns]
<块引用>

ValueError: Shape of passed values is (91, 1), indices imply (91, 3)

2 个答案:

答案 0 :(得分:0)

改变:

df2 = df2['ds'].mul(1e6).apply(pd.Timestamp)
df2 = pd.DataFrame(df2.to_list(), columns=['ds','y'])

到:

df2['ds_datetime'] = df2['ds'].mul(1e6).apply(pd.Timestamp)

答案 1 :(得分:0)

试试这个:

import pandas as pd
from pycoingecko import CoinGeckoAPI

cg = CoinGeckoAPI()
response = cg.get_coin_market_chart_by_id(id='bitcoin',
                                            vs_currency='usd',
                                            days='90',
                                            interval='daily')
 
df1 = pd.json_normalize(response)

df2 = df1.explode('prices')
df2 = pd.DataFrame(df2['prices'].to_list(), columns=['dates','prices'])
df2.rename(columns={'dates': 'ds','prices': 'y'}, inplace=True)
print('DATAFRAME EXPLODED: ',df2)

df2['ds'] = df2['ds'].mul(1e6).apply(pd.Timestamp)
# df2 = pd.DataFrame(df2.to_list(), columns=['ds','y'])

df3 = df2.tail()
print('DATAFRAME TAILED: ',df3)

通过写入 df2 = df2['ds'].mul(1e6).apply(pd.Timestamp),您从 df2 中删除了价格列。