gpt4 book ai didi

python - 如何将列表作为新行附加到 pandas 数据框

转载 作者:行者123 更新时间:2023-11-30 22:19:47 25 4
gpt4 key购买 nike

我正在尝试创建一个 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)

第一次我无法理解它是如何工作的,第二次它返回这样的错误。该列表应该能够包含任何类型的数据。

我的目标是记录所有交易记录并将它们聚合为并将其附加到记事本并最终显示每条交易记录。

示例数据如下:

side = 'Buy'
ticker = 'AAPL'
quantity = 100
price = 100
timestamp = "2018-02-27 23:12:50"
transaction = 100000

每笔交易都会创建带有时间戳的新值。

最佳答案

您可以使用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

关于python - 如何将列表作为新行附加到 pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49008713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com