Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 迭代数据帧的行,但将每行保留为一个数据帧_Python 3.x_Pandas - Fatal编程技术网

Python 3.x 迭代数据帧的行,但将每行保留为一个数据帧

Python 3.x 迭代数据帧的行,但将每行保留为一个数据帧,python-3.x,pandas,Python 3.x,Pandas,我想迭代一个数据帧的行,但将每一行作为一个数据帧,它与父数据帧的格式完全相同,只是只有一行。我知道如何调用DataFrame()并传入索引和列,但由于某些原因,这并不总是提供与父数据帧相同的格式。对序列(即行)调用_frame()会将其转换回数据帧,但通常会进行转置或以某种方式与父数据帧格式不同。是否有一些简单的方法可以做到这一点,并保证每行的格式始终相同 以下是迄今为止我提出的最佳解决方案: def transact(self, orders): # Buy or Sell

我想迭代一个数据帧的行,但将每一行作为一个数据帧,它与父数据帧的格式完全相同,只是只有一行。我知道如何调用DataFrame()并传入索引和列,但由于某些原因,这并不总是提供与父数据帧相同的格式。对序列(即行)调用_frame()会将其转换回数据帧,但通常会进行转置或以某种方式与父数据帧格式不同。是否有一些简单的方法可以做到这一点,并保证每行的格式始终相同

以下是迄今为止我提出的最佳解决方案:

    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)