首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用pandas将多个重叠的ohlc csv合并为一个排序的csv文件

问使用pandas将多个重叠的ohlc csv合并为一个排序的csv文件
EN

Stack Overflow用户
提问于 2020-07-17 20:31:18
回答 1查看 159关注 0票数 1

我正在尝试将多个OHLC csv文件合并为一个文件。我在互联网上下载了一些数据,但索引部分重叠。数据可能如下所示:

代码语言:javascript
复制
<file1>
o,h,l,c,v,t
...
364.4,364.4,364.4,364.4,155.0,2019-01-01 10:59:59
364.4,364.59,364.4,364.59,371.0,2019-01-01 11:00:00
364.59,364.59,364.59,364.59,305.0,2019-01-01 11:00:01

<file2>
o,h,l,c,v,t
364.4,364.59,364.4,364.59,1371.0,2019-01-01 11:00:00
364.59,364.59,364.59,364.59,305.0,2019-01-01 11:00:01
364.59,364.59,364.59,364.59,305.0,2019-01-01 11:00:02
364.59,364.59,364.59,364.59,305.0,2019-01-01 11:00:03
...

<file3>
o,h,l,c,v,t
364.4,364.4,364.4,364.4,155.0,2019-01-01 12:00:00
364.4,364.59,364.4,364.59,1371.0,2019-01-01 12:00:01
...

我需要的是。

代码语言:javascript
复制
<file_merged>
o,h,l,c,v,t
...
364.4,364.4,364.4,364.4,155.0,2019-01-01 10:59:59
364.4,364.59,364.4,364.59,371.0,2019-01-01 11:00:00
364.59,364.59,364.59,364.59,305.0,2019-01-01 11:00:01
364.59,364.59,364.59,364.59,305.0,2019-01-01 11:00:02
364.59,364.59,364.59,364.59,305.0,2019-01-01 11:00:03
...
364.4,364.4,364.4,364.4,155.0,2019-01-01 12:00:00
364.4,364.59,364.4,364.59,1371.0,2019-01-01 12:00:01
...

我已经找到了一种巧妙的方法来将数据加载到一个对象中,但是我遗漏了需要将无序列表合并到一个有序数据帧中的最后部分,在这个部分中,双精度项被删除,数据被排序。Pd.merge(左,右,索引=‘t’)我想我可以在一个丑陋的循环中使用,但我想知道是否有更优雅的方法?这就是我到目前为止加载数据的方式(没有丑陋的循环):

代码语言:javascript
复制
datadir = r'/home/test'
files = [i for i in os.listdir(datadir) if os.path.isfile(os.path.join(datadir, i)) and i.startswith('AAPL_')]
datalist = [pd.read_csv(datadir + '/' + filename, index_col='t') for filename in files]

提前感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-17 20:52:07

使用pathlib.Path.glob获取datadir中以AAPL_开头的所有文件的路径,并使用pd.read_csv以及可选参数parse_dates和index_col,最后使用pd.concat连接所有代码,并使用DataFrame.sort_index对< dfs >D9dfs>上的数据帧进行排序。

代码语言:javascript
复制
from pathlib import Path

dfs = [pd.read_csv(p, parse_dates=['t'])
       for p in Path(datadir).glob(r'AAPL_*')]
df = pd.concat(dfs).drop_duplicates('t').set_index('t').sort_index()

结果:

代码语言:javascript
复制
print(df)
                          o       h       l       c       v
t                                                          
2019-01-01 10:59:59  364.40  364.40  364.40  364.40   155.0
2019-01-01 11:00:00  364.40  364.59  364.40  364.59  1371.0
2019-01-01 11:00:01  364.59  364.59  364.59  364.59   305.0
2019-01-01 11:00:02  364.59  364.59  364.59  364.59   305.0
2019-01-01 11:00:03  364.59  364.59  364.59  364.59   305.0
2019-01-01 12:00:00  364.40  364.40  364.40  364.40   155.0
2019-01-01 12:00:01  364.40  364.59  364.40  364.59  1371.0
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62954023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档