- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试构建一个股票数据的 DataFrame,我可以获得我需要的所有数据,但一次只能获得 1000 个数据点。所以我想做的是将最初的 1000 个数据点保存在一个 csv 文件中,然后时不时地再次运行我的程序,以及任何新数据,我想 append 到旧的 DataFrame。因此它需要根据“旧 df”检查“新 df”并 append 任何新行。
假设我的“旧 df”保存在 csv 文件中,如下所示:
Date Stock A Stock B Stock C Stock D
01/02/19 100.0 87.0 74.0 228.0
02/02/19 101.5 87.5 75.0 227.0
03/02/19 102.0 89.0 76.5 225.5
然后我在第二天运行我的程序,'new df' 看起来像这样:
Date Stock A Stock B Stock C Stock D
02/02/19 101.5 87.5 75.0 227.0
03/02/19 102.0 89.0 76.5 225.5
04/02/19 103.0 89.5 77.5 226.0
然后我需要让我的程序识别“新 df”中的最后一行不在“旧 df”中,并将最近的数据 append 到“旧 df”中,在这种情况下:
04/02/19 103.0 89.5 77.5 226.0
生成以下 df,然后将其保存为“旧 df”,以便我可以在第二天重复该过程:
Date Stock A Stock B Stock C Stock D
01/02/19 100.0 87.0 74.0 228.0
02/02/19 101.5 87.5 75.0 227.0
03/02/19 102.0 89.0 76.5 225.5
04/02/19 103.0 89.5 77.5 226.0
我想代码将不得不使用以下的一些变体:
old_df.append(new_df)
但是里面有一些东西可以扫描 old_df 中已有的数据。
如有任何帮助,我们将不胜感激。
到目前为止,这是我的代码:
import requests
import json
import pandas as pd
import datetime as dt
#total_data = pd.read_csv('1m_bin_db.csv')
#total_data.set_index('Date', inplace=True)
def get_bars(symbol, interval):
url = 'https://api.binance.com/api/v1/klines?symbol=' + symbol + '&interval=' + interval + '&limit=1000'
data = json.loads(requests.get(url).text)
df = pd.DataFrame(data)
df.columns = ['open_time',
'o', 'h', 'l', 'c', 'v',
'close_time', 'qav', 'num_trades',
'taker_base_vol', 'taker_quote_vol', 'ignore']
df.index = [dt.datetime.fromtimestamp(x/1000.0) for x in df.close_time]
return df
coins = ['ADABTC']
dfs = []
for coin in coins:
get_data = get_bars(coin, '1m')
df = get_data[['o', 'h', 'l', 'c', 'v']].add_prefix(coin + '_')
df = df.apply(lambda x: pd.to_numeric(x, errors='coerce'))
dfs.append(df)
prices_1m = pd.concat(dfs, axis=1)
prices_1m.index.name = 'Date'
当我从 CSV 打印 total_data
时,我得到:
ADABTC_o ADABTC_h ... ADABTC_c ADABTC_v
Date ...
2019-02-15 12:41:59.999 0.000011 0.000011 ... 0.000011 48805.0
2019-02-15 12:42:59.999 0.000011 0.000011 ... 0.000011 837.0
2019-02-15 12:43:59.999 0.000011 0.000011 ... 0.000011 19430.0
2019-02-15 12:44:59.999 0.000011 0.000011 ... 0.000011 15319.0
2019-02-15 12:45:59.999 0.000011 0.000011 ... 0.000011 769414.0
当我打印 prices_1m
时,我得到:
ADABTC_o ADABTC_h ... ADABTC_c ADABTC_v
Date ...
2019-02-15 12:43:59.999 0.000011 0.000011 ... 0.000011 19430.0
2019-02-15 12:44:59.999 0.000011 0.000011 ... 0.000011 15319.0
2019-02-15 12:45:59.999 0.000011 0.000011 ... 0.000011 773414.0
2019-02-15 12:46:59.999 0.000011 0.000011 ... 0.000011 7449.0
2019-02-15 12:47:59.999 0.000011 0.000011 ... 0.000011 0.0
所以我想做的就是将最后两行粘贴到 total_data
的底部,我做到了:
df = total_data.append(prices_1m).drop_duplicates()
结果如下:
ADABTC_o ADABTC_h ... ADABTC_c ADABTC_v
Date ...
2019-02-15 12:43:59.999 0.000011 0.000011 ... 0.000011 19430.0
2019-02-15 12:44:59.999 0.000011 0.000011 ... 0.000011 15319.0
2019-02-15 12:45:59.999 0.000011 0.000011 ... 0.000011 769414.0
2019-02-15 12:45:59.999000 0.000011 0.000011 ... 0.000011 773414.0
2019-02-15 12:46:59.999000 0.000011 0.000011 ... 0.000011 7449.0
所以我认为问题是数据本质上是“实时”的,所以 12:45:59.999 是 total_data
中的最后一个数据点,我可能在还剩 10 秒的时候就得到了该数据60 秒的数据周期。因此,在 prices_1m
中,12:45:59.999 数据点已完全更新,这解释了重复时间与不同“V”列之间的差异。所以我觉得我们快到了,但我希望 prices_1m
优先于 total_data
,所以最新的数据 append 到 total_data
。
2019-02-15 12:45:59.999 0.000011 0.000011 ... 0.000011 773414.0
所以我希望该行成为 2019-02-15 12:45:59.999
的条目,然后从那里继续追加。
我在打印时得到这个(total_data.index):
Index(['2019-02-14 20:06:59.999', '2019-02-14 20:07:59.999',
'2019-02-14 20:08:59.999', '2019-02-14 20:09:59.999',
'2019-02-14 20:10:59.999', '2019-02-14 20:11:59.999',
'2019-02-14 20:12:59.999', '2019-02-14 20:13:59.999',
'2019-02-14 20:14:59.999', '2019-02-14 20:15:59.999',
...
'2019-02-15 12:36:59.999', '2019-02-15 12:37:59.999',
'2019-02-15 12:38:59.999', '2019-02-15 12:39:59.999',
'2019-02-15 12:40:59.999', '2019-02-15 12:41:59.999',
'2019-02-15 12:42:59.999', '2019-02-15 12:43:59.999',
'2019-02-15 12:44:59.999', '2019-02-15 12:45:59.999'],
dtype='object', name='Date', length=1000)
最佳答案
我相信您需要使用 DatetimeIndex
和 concat
,而不是 merge
by date
列:
coins = ['ADABTC']
dfs = []
for coin in coins:
get_data = get_bars(coin, '1m')
df = get_data[['o', 'h', 'l', 'c', 'v']].add_prefix(coin + '_')
df = df.apply(lambda x: pd.to_numeric(x, errors='coerce'))
dfs.append(df)
prices_1m = pd.concat(dfs, axis=1)
prices_1m.to_csv('1m_bin_db.csv')
然后:
total_data.index = pd.to_datetime(total_data.index)
df = total_data.append(prices_1m)
df = df[~df.index.duplicated(keep='last')]
关于pandas - 用新数据 append 一个 pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54708188/
Racket 的 pict , 有几个 combinators for combining other pictures .这些文档包含一个很好的表格,说明其 *-append 组合器的工作方式: 这
我看过 Insert content into iFrame和他们的 fiddle http://jsfiddle.net/8VP4y/3/提出以下我遇到问题的代码。 我已经为下面的问题创建了一个 j
我有一个显示非常奇怪结果的微基准: @BenchmarkMode(Mode.Throughput) @Fork(1) @State(Scope.Thread) @Warmup(iterations =
我想知道是否有人可以回答我使用 StringBuilder 对象在 java 中执行这些语句中的哪一个会更好: 使用 .append(string1 + string 2) 对比 .append(st
假设我有两个相同类型的流。是否可以将一个流 append 到另一个流而无需事先将它们转换为列表? 例子: Stream ms = ...; Stream ns = ...; return ms.app
我有以下有效的 jQuery 代码,但它让我思考是否可以对正在 append 的内容执行 append 操作,而无需指定我想要 append 的内容。 append().append() 并没有达到目
这是为了显示诊断页面的检查。我有一个 .append(not_ok) 但当 swf 文件加载 100% 时,我想删除 not_ok 附加,然后添加一个 .append(ok)。 function ca
x = [[1,2],[2,3],[10,1],[10,10]] def duplicatingRows(x, l): severity = x[l][1] if severity =
我有一个列表,我正在尝试将数据注入(inject)其中。列表如下所示 data2 = ['TECH2_HELP', 'TECH2_1507', 'TECH2_1189', 'TECH2_4081',
为了有效地进行一些 DOM 操作,我分离了一个元素。在这个过程中,我遇到了一个有趣的情况: var $holder = $("#d"); var $wrapper = $("").css("borde
我遇到了图片在移动设备上加载速度不够快的问题。我的元素有一个图像和一个按钮。单击该按钮时,图像向下滑动,另一幅图像从顶部滑动以取代它。这是代码 html CSS .moveF
我正在编写一个包含 10 个遗愿 list 的简单哈希表。使用内置的 hash() 计算索引,然后对表大小取模。但是,当我尝试将该对象 append 到该索引处的存储桶列表时,它会 append 到每
我是 LISP 的新手,我正在尝试处理类的 cond 语句。目前,我正在尝试检查传递的值是否为列表,如果是,则将字母 d append 到列表中。 这是我的代码: (defun test(L) (li
我正在使用 Jquery 将数据 append 到 div。但是,append 语句之后页面上没有显示任何内容。 我尝试使用 $(window).load 来确保页面已加载,但这仍然不起作用。 HTM
我有以下代码; function SetupDropdowns() { var PrevType; dropdown1 = document.getElemen
我想在 smarty 中创建一个数组并在其中执行 append 功能!就像我在 smarty 模板中声明一个变量(如 {assign var=sizearr value=''} )然后我想在循环中向其
请考虑以下代码片段: var ul = $(".list_b").find("li").remove().end(); $.each(Sites, functi
我的日志记录配置中有两个 appenders。其中之一在 ERROR 事件上发送电子邮件。 一个类,我无法控制,垃圾邮件 ERROR 消息。所以我仍然想要那些消息,但不是在两个 appenders 中
我正在尝试制作 editText,我要在其中插入一些文本。在每三个字符之后,我想插入破折号。 例子: 类型:123 结果:123- 现在当光标在破折号后面并且你按下删除键时,我想删除破折号和破折号
当我尝试 append 简单的“hello”时,它会被 append ,但很快就会自动删除。仅当我在下面给出的表单中使用它时,才会出现此问题,如果删除该表单,则不会出现问题,并且 hello 会正确
我是一名优秀的程序员,十分优秀!