Python 从现有数据帧创建新数据帧

Python 从现有数据帧创建新数据帧,python,python-3.x,pandas,Python,Python 3.x,Pandas,我需要创建一个新的数据框,其中包含来自现有df的特定列。我的代码运行正常,但我使用CopyWarning获得设置。我已经研究过这个警告,我理解它存在的原因(即:链式作业)。我也知道你可以简单地关闭警告 但是,我的问题是,使用现有数据帧中的特定列创建新数据帧的正确方法是什么,以避免收到此警告。我不想简单地关闭警告,…因为我认为有一种比我现在做的更好(更像蟒蛇)的方法。换句话说,我想要一个全新的数据框架来使用,我不想只复制所有的列 下面的代码将现有数据帧传递给函数(RemoveBrokerRule)

我需要创建一个新的数据框,其中包含来自现有df的特定列。我的代码运行正常,但我使用CopyWarning获得设置。我已经研究过这个警告,我理解它存在的原因(即:链式作业)。我也知道你可以简单地关闭警告

但是,我的问题是,使用现有数据帧中的特定列创建新数据帧的正确方法是什么,以避免收到此警告。我不想简单地关闭警告,…因为我认为有一种比我现在做的更好(更像蟒蛇)的方法。换句话说,我想要一个全新的数据框架来使用,我不想只复制所有的列

下面的代码将现有数据帧传递给函数(RemoveBrokerRule)。新的dataframe被创建,它只包含来自现有df的4列。然后,我对新的df执行某些操作并返回它

newdf = removeBrokenRule('Forgot rules', df)

def removeBrokenRule(rule, df):
    newdf = df[['Actual ticks', 'Broken Rules', 'Perfect ticks', 'Cumulative Actual']]
    newdf['Actual ticks'][newdf['Broken Rules'] == rule] = newdf['Perfect ticks']
    newdf['New Curve'] = newdf['Actual ticks'].cumsum()
    return newdf

非常感谢。

默认情况下,这与pandas无关,这是python,变量将通过引用传递,因此如果您想获取传递的df的深度副本,那么您应该执行
newdf=df[['Actual ticks','Breaked Rules','Perfect ticks','Cumultive Actual']]。copy()
另外,您的第二行应该是:
newdf.loc[newdf['breaked Rules']==rule,'Actual ticks']=newdf['Perfect ticks']
为了避免链式分配,非常感谢@EdChum解决了这个问题。熊猫网站似乎没有关于loc的任何文件。忙着研究更多关于它的信息。看看这个:这解释了为什么你不应该使用链式索引,你想让我在上面发布一个详细说明我的评论的答案吗?再次感谢@EdChum。我知道loc,但找不到任何关于它的文档来真正了解它的功能。现在正忙着浏览你的链接。