我正在导入一些实验数据进行处理,并希望将每次实验运行的数据保存为数据帧列表中的数据帧。下面给出了导入数据帧列表的代码。
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)
如何存储数据帧列表,以便将来的修改不会影响所做的副本?我尝试过深度复制,但没有成功。我怀疑这是因为我的列表中的对象是可变的。有没有办法将数据帧列表的副本保存为元组?任何帮助将不胜感激,谢谢。
运行 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]