【发布时间】:2017-09-19 21:19:40
【问题描述】:
我想遍历数据框的行,但将每一行保留为具有与父数据框完全相同格式的数据框,除了只有一行。我知道调用 DataFrame() 并传入索引和列,但由于某种原因,这并不总是给我与父数据帧相同的格式。在系列(即行)上调用 to_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: 试图在 DataFrame 中的切片副本上设置一个值 请参阅文档中的注意事项:http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy empty_order.loc[index] = 订单 C:\Users\BNielson\Anaconda3\envs\PythonMachineLearning\lib\site-packages\pandas\core\indexing.py:477: SettingWithCopyWarning: 试图在 DataFrame 中的切片副本上设置一个值。 尝试改用 .loc[row_indexer,col_indexer] = value 请参阅文档中的注意事项:http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy self.obj[项目] = s
所以这行给出警告:
empty_order.loc[index] = order
这特别奇怪,因为我 am 已经在使用 .loc,而通常当您不使用 .loc 时会出现此错误。
【问题讨论】:
-
您能否提供一些与您的问题相同的数据和代码?
-
是的,我添加了我想出的实际有效的代码。事实是这是相当上下文的,所以有点难以解释。底线是我希望数据框的每一行都具有完全相同的索引(尽管仅针对一行)和列。这样我的代码就不必询问我是否有系列或数据框,并且它们的工作方式不同,具体取决于我所拥有的。
-
收到该警告特别令人沮丧,尤其是当文档建议您仅在不使用 .loc (我正在使用)时才收到它。它希望我在这里在语法上使用什么?
标签: python-3.x pandas