复制 Pandas 中的数据框列表

问题描述 投票:0回答:1

我正在导入一些实验数据进行处理,并希望将每次实验运行的数据保存为数据帧列表中的数据帧。下面给出了导入数据帧列表的代码。

 def get_dataframe(filepath):
  for path, dir, files in os.walk(filepath):
    continue

  #creating empty list of dataframes
  dataframes_list = []

  #appending each dataset as a new dataframe inside list
  for f in files:
    if f.endswith(".csv"):
      temp_df = pd.read_csv(filepath +f)

      #removing NaN values and adding final dataframe to the list of dataframes
      temp_df = temp_df.dropna(axis =0, how = "any")
      dataframes_list.append(temp_df)

导入数据框列表后,我想规范化所有数据以供进一步使用。但在执行此操作之前,我想保存非标准化数据帧列表的副本。

dataframes_list = get_dataframe('path')
dataframes_list_nonnorm = dataframes_list.copy()

display dataframes_list_nonnorm

运行下面的代码似乎总是会修改非标准化 df 列表以及原始列表。当我显示两个列表时,它们是相同的值(标准化值)

dataframes_list = z_scaled_norm(dataframes_list)

display(dataframes_list)
display(dataframes_list_nonnorm)

如何存储数据帧列表,以便将来的修改不会影响所做的副本?我尝试过深度复制,但没有成功。我怀疑这是因为我的列表中的对象是可变的。有没有办法将数据帧列表的副本保存为元组?任何帮助将不胜感激,谢谢。

python pandas deep-copy
1个回答
0
投票

运行 dataframes_list.copy() 仅复制列表;它仍然包含对其中相同数据帧的引用。你需要运行的是:

dataframes_list_nonnorm = [df.copy() for df in dataframes_list]

工作示例

import pandas as pd
d1 = pd.DataFrame({'a':[1,2,3]})
d2 = pd.DataFrame({'b':[10,20,30]})
list1 = [d1, d2]
list2 = [df.copy() for df in list1]
list2[0] *= -1
display(list1)
display(list2)

给出:

[   a
 0  1
 1  2
 2  3,
     b
 0  10
 1  20
 2  30]
[   a
 0 -1
 1 -2
 2 -3,
     b
 0  10
 1  20
 2  30]
© www.soinside.com 2019 - 2024. All rights reserved.