【问题标题】:Adding a list of dataframes to a dictionary将数据框列表添加到字典
【发布时间】:2020-04-22 07:29:23
【问题描述】:

我正在尝试将 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)}     

问:为什么dict中只有每个列表的最后一个元素? 我是否因为试图将数据框列表添加到字典而生气? 两个列表都有唯一的值。

我这样制作数据框列表:

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']  

【问题讨论】:

    标签: python pandas dictionary


    【解决方案1】:

    我认为你的问题在这里:

    for df in dataframes:
        df.name = filename[:-10]
        df.columns = ['Time', 'Measurement']  
    

    这是在第一个 for 所以你正在修改所有数据帧,到最后,所有数据帧都将具有相同的名称数据,请记住,当你定义 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 的方法都是正确的。

    【讨论】:

      【解决方案2】:

      你可以这样做:

      d = {}
      for filename in filenames:
          d[filename] = pd.read_csv(path+filename, sep=" ", header = None)
      

      这里,key 将具有数据帧的名称(即文件名),值是实际的数据帧。

      你可以像这样从 dict 中读取:

      for key, val in d.items():
          print(key,val)
      

      【讨论】:

      • 感谢您的帮助。真的很喜欢你创建字典的方式,看起来比我做的更有效率/好多了。
      猜你喜欢
      • 1970-01-01
      • 2017-04-22
      • 2018-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-10
      • 2020-05-15
      • 1970-01-01
      相关资源
      最近更新 更多