Python元组和内存
Posted
技术标签:
【中文标题】Python元组和内存【英文标题】:Python tuple and memory 【发布时间】:2022-01-23 21:04:37 【问题描述】:我有一个奇怪的问题。
我得到一些这样的数据:
save_last_row = exchange.fetch_ohlcv('BTC/USD', timeframe='1m', limit=2)
save_last_row = pd.DataFrame(save_last_row[:-1],columns=['Date Time', 'Open', 'High', 'Low', 'Close', 'Volume'])
数据看起来像这样:
Date Time Open High Low Close Volume
0 1640190840000 49075.0 49085.0 49044.0 49071.0 147792.0244
这是一个循环,所以我得到每个循环的最后一行。 奇怪的是,当我这样做之后:
last_row = save_last_row
last_row = function_convert(last_row)
我为 last_row 获得了:
Date Time Open High Low Close Volume
0 2021-12-22 17:41:00 49041.0 49073.0 49029.0 49033.0 136169.2562
我们可以看到日期时间的格式不同。如果我打印 save_last_row (我没有修改),我有:
Date Time Open High Low Close Volume
0 2021-12-22 17:41:00 49041.0 49073.0 49029.0 49033.0 136169.2562
为什么???? Last_row 仅从 save_last_row 中获取数据。如何修改变量 save_last_row ???
注意:function_convert 只是修改一些值:
def conversion_date(df):
df["Date Time"] = df["Date Time"] + 3600000 # add one hour to have local time
df["Date Time"] = (df["Date Time"].apply(parse_dates)) # convert
return df
编辑:变量 last_row 已转换(确定),但 save_last_row 也! (这不行,我没有转换它)那为什么??
EDIT2:使用 save_last_row.copy() 谢谢克里斯·多伊尔
【问题讨论】:
parse_dates
是我们应该知道的吗?某处有内置功能吗?乍一看,您最初拥有的是具有毫秒精度的 Unix 时间。 parse_dates
正在以某种方式转换它。
def parse_dates(ts): return datetime.fromtimestamp(ts/1000.0)
当你有日期授予功能时,为什么日期格式会发生变化......
我认为你的困惑是last_row = save_last_row
没有复制数据框,它只是说 last_row 和 save_last_row 现在指向同一个数据框。因此,如果您修改 last_row,您修改的是 save_last_row 指向的同一数据框。相反,也许你想要last_row = save_last_row.copy()
可能应该作为以下副本关闭:***.com/questions/2612802/…
【参考方案1】:
如果我理解正确,您希望时间戳是整数而不是日期时间对象。
您的parse_date
函数将整数时间戳解析为日期时间对象,该对象以不同的方式呈现。如果您不想进行这种转换,只需像这样从您的 conversion_date
函数中保留第二行即可。
def conversion_date(df):
df["Date Time"] = df["Date Time"] + 3600000 # add one hour to have local time
return df
【讨论】:
我编辑我的消息以上是关于Python元组和内存的主要内容,如果未能解决你的问题,请参考以下文章