Python 3.x 迭代数据帧的行,但将每行保留为一个数据帧
我想迭代一个数据帧的行,但将每一行作为一个数据帧,它与父数据帧的格式完全相同,只是只有一行。我知道如何调用DataFrame()并传入索引和列,但由于某些原因,这并不总是提供与父数据帧相同的格式。对序列(即行)调用_frame()会将其转换回数据帧,但通常会进行转置或以某种方式与父数据帧格式不同。是否有一些简单的方法可以做到这一点,并保证每行的格式始终相同 以下是迄今为止我提出的最佳解决方案:Python 3.x 迭代数据帧的行,但将每行保留为一个数据帧,python-3.x,pandas,Python 3.x,Pandas,我想迭代一个数据帧的行,但将每一行作为一个数据帧,它与父数据帧的格式完全相同,只是只有一行。我知道如何调用DataFrame()并传入索引和列,但由于某些原因,这并不总是提供与父数据帧相同的格式。对序列(即行)调用_frame()会将其转换回数据帧,但通常会进行转置或以某种方式与父数据帧格式不同。是否有一些简单的方法可以做到这一点,并保证每行的格式始终相同 以下是迄今为止我提出的最佳解决方案: def transact(self, orders): # Buy or Sell
def transact(self, orders):
# Buy or Sell
if len(orders) > 1:
empty_order = orders.iloc[0:0]
for index, order in orders.iterrows():
empty_order.loc[index] = order
#empty_order.append(order)
self.sub_transact(empty_order)
else:
self.sub_transact(orders)
本质上,我清空数据帧,然后将For循环中的序列插入其中。这可以正常工作,但会发出以下警告:
C:\Users\BNielson\Google Drive\My Files\machine learning\Python machine learning\ML4T_Ex2_1.py:57:SettingWithCopyWarning:
试图在数据帧切片的副本上设置值
请参阅文档中的注意事项:
空订单。loc[索引]=订单
C:\Users\BNielson\Anaconda3\envs\PythonMachineLearning\lib\site packages\pandas\core\index.py:477:SettingWithCopyWarning:
试图在数据帧切片的副本上设置值。
尝试改用.loc[row\u indexer,col\u indexer]=value
请参阅文档中的注意事项:
self.obj[item]=s
所以这条线给出了警告:
empty_order.loc[index] = order
这尤其奇怪,因为我已经在使用.loc了,而通常情况下,当您不使用.loc时会出现此错误 使用具有唯一列表的
groupby
groupby
完全按照您的要求执行,它在每个组上迭代,每个组都是一个数据帧。因此,如果您对其进行操作,使groupby
的值对于每一行都是唯一的,那么当您迭代组时,将得到一个单行数据帧
for n, group in df.groupby(np.arange(len(df))):
pass
# do stuff
有一种更简单的方法来做我想做的事
order.to_frame().T
所以
这实际上是将序列(仍然包含必要的列和索引信息)转换回数据帧。但出于一些愚蠢的原因(但我肯定是Pythonic),它将其转换为上一行现在是列,上一列现在是多行!所以你只要把它转回去 如果我能建议一种替代方法,那就是:
对于索引,按顺序排序。iterrows():
orders.loc[索引:索引]
orders.loc[index:index]
正好是一行数据帧切片,具有相同的结构,包括索引和列名。您能提供一些与您的问题相同的数据和代码吗?是的,我添加了我提出的实际可行的代码。事实上,这是相当有背景的,所以有点难以解释。底线是,我希望数据帧的每一行都有完全相同的索引(尽管只针对一行)和列。这样,我的代码就不必问我是否有一个系列或数据帧,它们的工作方式会因我拥有的不同而有所不同。得到这样的警告尤其令人沮丧,尤其是当文档建议您仅在不使用.loc(我正在使用)的情况下才得到它时。在这里,它希望我在语法上使用什么?
if len(orders) > 1:
for index, order in orders.iterrows():
self.sub_transact(order.to_frame().T)
else:
self.sub_transact(orders)