【发布时间】:2017-12-27 12:13:36
【问题描述】:
场景:继之前的一些问题之后,我现在有一个代码可以产生 2 个数据帧(出价/询价)。
我正在尝试做的事情: 这两个数据框将日期作为列标题,将标识符作为行索引,并将数字值作为其他所有内容。我想匹配日期、标识符、出价和询价,并以如下格式输出到 txt:
date 1 identifier 1 bid ask
date 1 identifier 2 bid ask
date 1 identifier 3 bid ask
date 2 identifier 1 bid ask
date 2 identifier 2 bid ask
date 2 identifier 4 bid ask
date 3 identifier 2 bid ask
date 2 identifier 3 bid ask
等等。
Obs1:并非所有日期都有所有标识符的值(有些是 NaN)。
Obs2:我已经尝试(在我的代码的以前版本中)拥有数据帧列表或只有两个数据帧(出价和询价),但我一直遇到多个问题(例如:我获取未知值格式或超时),所以我决定将我的源文件分成两组。
问题:我无法正确匹配数据(如 vlookup)
问题1:我做错了什么?有没有更好的办法?
Obs3:我目前正在尝试使用多索引创建一个 3d 数据框,更高级别是(出价/要价)。我还尝试使用 pandas 的 series.map 函数在数据帧之间进行某种“vlookup”,但事实证明效率不高。
当前代码:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import glob, os
import datetime as dt
from datetime import datetime
import matplotlib as mpl
from openpyxl import load_workbook
import sys
directory = os.path.join("C:\\","Users\\DGMS\\Desktop\\final 2\\run 1 test")
dfbid = pd.DataFrame()
dfask = pd.DataFrame()
b = pd.DataFrame()
a = pd.DataFrame()
for root,dirs,files in os.walk(directory):
for file in files:
f = os.path.join(root, file)
wb = load_workbook(f)
print (f)
for sheet in wb.worksheets:
if sheet.title == "Bid":
a = pd.read_excel(f, "Bid")
for i in range(1,len(a.columns)):
a.columns.values[i] = pd.to_datetime(a.columns.values[i])
dfbid = pd.concat([dfbid, a])
print ('bid done')
elif sheet.title == "Ask":
b = pd.read_excel(f, "Ask")
for i in range(1,len(b.columns)):
b.columns.values[i] = pd.to_datetime(b.columns.values[i])
dfask = pd.concat([dfask, b])
print ('ask done')
parts = {'Bid': dfbid, 'Ask': dfask}
finalresult = pd.concat(parts)
这是我的第一个数据帧之一的 sn-p(询问):
01/01/2010 02/01/2010 03/01/2010
AT0000383864 160.614 161.1436 161.1532
AT0000385745 109.3122 109.3144 109.3068
AT0000386115 117.7972 118.0388 118.051
AT0000A001X2 119.7004 120.0058 120.031
AT0000A04967 152.8196 153.7868 153.792
这是我的第二个数据框之一的 sn-p(出价):
01/01/2010 02/01/2010 03/01/2010
AT0000383864 161.038 161.5676 161.5772
AT0000385745 109.4322 109.4344 109.4268
AT0000386115 118.0202 118.2618 118.274
AT0000A001X2 119.8284 120.1338 120.159
我想得到什么(输出到 txt):
AT0000383864 01/01/2010 161.038 160.614
AT0000383864 02/01/2010 161.5676 161.1436
AT0000383864 03/01/2010 161.5772 161.1532
AT0000385745 01/01/2010 109.4322 109.3122
等等。请记住,有些标识符在两个数据帧(出价/要价)中具有相同日期的数据,而有些标识符仅针对其中一个。
【问题讨论】:
-
发布您的两个数据框的一些示例输出以及您尝试获得的示例结果会很有用。
-
也许this documentation 可以使用。
-
@James 刚刚将其添加到末尾。
-
@Marein 我一直在尝试我能找到的所有形式的连接、附加和多索引。似乎没有任何效果。