我尝试创建pandas.DataFrame
来记录每笔交易记录。
这是我创造的:
def create_blotter():
blotter = []
return blotter
def create_blotter_columns():
columns = ['Buy|Sell', 'Ticker', 'Volume', 'PricePerShare', 'Timestamp', 'TotalCosts']
return columns
class Ledger:
_blotter = create_blotter()
_blotter_columns = create_blotter_columns()
def update_blotter(self, side, ticker, quantity, price, timestamp, transaction):
columns = self._blotter_columns
line = [side, ticker, quantity, price, timestamp, transaction]
self._blotter.append(line)
self._blotter = pd.DataFrame(self._blotter, columns=columns)
self._blotter.sort_index(ascending=False)
return self._blotter
我这样做的原因是,当我按如下方式创建了吸墨纸和列时,它会返回元组,因此我无法为其添加新的列表行。
def create_blotter_frame():
blotter = []
columns = ['Buy|Sell', 'Ticker', 'Volume', 'PricePerShare', 'Timestamp', 'TotalCosts']
return blotter, columns
无论如何,第一个代码第一次工作,但它返回错误信息:
RuntimeWarning: '<' not supported between instances of 'str' and 'int', sort order is undefined for incomparable objects result = result.union(other)
第一次我不能理解它是如何工作的,第二次它会返回这样的错误。该列表应该能够处理任何类型的数据。
我的目标是记录所有交易记录并将其汇总为line
并将其附加到blotter
并最终显示每笔交易记录。
示例数据如下:
side = 'Buy'
ticker = 'AAPL'
quantity = 100
price = 100
timestamp = "2018-02-27 23:12:50"
transaction = 100000
每个事务都会创建带时间戳的新值。
答案 0 :(得分:3)
您可以使用pandas.Dataframe.append()
:
blotter.append(
dict(zip(columns, (side, ticker, quantity, price, timestamp, transaction))),
ignore_index=True).set_index('Timestamp').sort_index(ascending=False)
class Ledger:
columns = ('Side', 'Ticker', 'Volume', 'PricePerShare',
'Timestamp', 'TotalCosts')
def __init__(self):
self._blotter = pd.DataFrame([], columns=self.columns).set_index(
'Timestamp')
def update_blotter(self, side, ticker, quantity, price, timestamp,
transaction):
self._blotter = self._blotter.append(
dict(zip(self.columns, (
side, ticker, quantity, price, timestamp, transaction))),
ignore_index=True).set_index('Timestamp').sort_index(
ascending=False)
return self._blotter
@property
def blotter(self):
return self._blotter
ledger = Ledger()
ledger.update_blotter(
side='Buy',
ticker='AAPL',
quantity=100,
price=100,
timestamp="2018-02-27 23:12:50",
transaction=100000,
)
print(ledger.blotter)
Side Ticker Volume PricePerShare TotalCosts
Timestamp
2018-02-27 23:12:50 Buy AAPL 100.0 100.0 100000.0