Pandas 如何复制熊猫数据帧,使其成为2个变量?

Pandas 如何复制熊猫数据帧,使其成为2个变量?,pandas,dataframe,Pandas,Dataframe,如何将一个数据帧转换为2个,以便在两个新创建的帧上分别对这两个帧进行操作?看起来,当我使用“=”将其分配给一个新变量时,它正在执行某种“按引用分配”,而不是实际复制数据帧 这就是我要做的。我首先将CSV文件加载到df_数据中 df_data = pd.read_csv(input_filename, usecols=colList, skiprows=2) 工作起来很有魅力。但是这个集合包含混合行(ML项目的训练和测试数据),所以我想拆分这些集合。简而言之:复制数据集,然后在新创建的df_tr

如何将一个数据帧转换为2个,以便在两个新创建的帧上分别对这两个帧进行操作?看起来,当我使用“=”将其分配给一个新变量时,它正在执行某种“按引用分配”,而不是实际复制数据帧

这就是我要做的。我首先将CSV文件加载到df_数据中

df_data = pd.read_csv(input_filename, usecols=colList, skiprows=2)
工作起来很有魅力。但是这个集合包含混合行(ML项目的训练和测试数据),所以我想拆分这些集合。简而言之:复制数据集,然后在新创建的
df_train_data
中删除带有标记“test”的所有行,反之亦然:

df_train_data = df_data
df_train_data.drop(df_train_data[df_train_data['Usage']=='test'].index, inplace=True)
del df_train_data['Usage']
df_test_data = df_data
df_test_data.drop(df_test_data[df_test_data['Usage']=='train'].index, inplace=True)
del df_test_data['Usage']
现在这会产生一个错误。在我删除
df\u train\u data
中的“Usage”列(上面第3行)后,它也会从
df\u data
中消失,因此在第6行中产生一个错误,因为它在
df\u test\u data
中不存在

我还看到我以为只会在
df\u train\u data
中删除的行完全消失了

为什么??如何将df_数据硬拷贝到两个数据帧中,然后分别处理这两个数据帧?

您正在寻找函数:

df_train_data = df_data.copy()

这将更具可读性:

df_train_data = df_data[df_test_data['Usage']=='train'].drop('Usage', axis=1)
df_test_data = df_data[df_test_data['Usage']=='test'].drop('Usage', axis=1)

天哪我不敢相信我的问题有多基本。再说一遍:这有什么好处?我是说。。。a=b也有效,对吗?为什么需要将其重新写入a=b.copy?@KingOtto
a=b
创建对同一对象的第二个引用。如果您对对象b进行更改,它们将出现在对象a中,但这两个变量都指向内存中的同一个对象。通过使用“复制”,您将拥有两个独立的对象。非常感谢!真的容易多了。不过,它应该是
df_train_data=df_data[df_data['Usage']=='train']。drop('Usage',axis=1)
,对吗?