我正在尝试将7个数据帧的列表添加到字典中,其中键是数据帧名称,值是数据帧本身,就像这样:
{"Clock 1": clock1_df, "Clock 2": clock2_df, ...}
我已经创建了一个具有数据帧名称的列表,然后尝试将两个列表放入字典中,但是它只会将每个列表的最后一个元素添加到字典中:
adict = dict(zip(f_names_list, dataframes))
或
bdict = {k:v for k, v in zip(f_names_list, dataframes)}
问:为什么字典中每个列表的最后一个元素才是? 我为尝试将数据帧列表添加到字典而生气吗? 这两个列表都有唯一的值。
我使数据框列表如下:
path = 'dat/'
f = []
for (dirpath, dirnames, filenames) in walk(path):
f.extend(filenames)
break
dataframes = []
for filename in filenames:
dataframes.append(pd.read_csv(path+filename, sep=" ", header = None))
for df in dataframes:
df.name = filename[:-10]
df.columns = ['Time', 'Measurement']
答案 0 :(得分:1)
您可以这样做:
d = {}
for filename in filenames:
d[filename] = pd.read_csv(path+filename, sep=" ", header = None)
此处,键将具有数据框的名称(即文件名),并且值是实际的数据框。
您可以像这样从dict中读取内容:
for key, val in d.items():
print(key,val)
答案 1 :(得分:1)
我认为您的问题在这里:
for df in dataframes:
df.name = filename[:-10]
df.columns = ['Time', 'Measurement']
这是第一个用于的内部,因此您要修改所有数据帧,最后,所有数据帧将具有相同的名称数据,请记住,在定义df
时,此变量包含对列表中的项目,因此您可以修改列表中的所有内容。
我不知道数据的样子,但这也许正是您要寻找的:
dataframes = []
for filename in filenames:
dataframes.append(pd.read_csv(path+filename, sep=" ", header = None))
df = dataframes[-1]
df.name = filename[:-10]
df.columns = ['Time', 'Measurement']
两种使用zip的方法都是正确的。