数据帧字典没有全部保存

时间:2016-01-25 21:28:34

标签: python dictionary pandas

我一直在尝试创建数据框字典,以便存储来自不同文件的数据。我在下面的循环中创建了一个数据框,我希望将它们聚合在一起以使每个数据框都包含在字典中。我必须在约会之后加入他们。

d = {}
for num in range(3,14): 
  nodeName = "rgs" + str(num).zfill(2) #The key should be the nodeName
  # Bunch of stuff to get the data ...

  # Fill dataframe
  data = {'date':date_list, 'users':users_list}
  df = pd.DataFrame(data)
  df = df.convert_objects(convert_numeric=True)
  df = df.dropna(subset=['users'])
  df['users'] = df['users'].astype(int)
  d = {nodeName:df} 

print d

我遇到的问题是,如果我将字典打印出循环,我只有一个项目,最后一个。

{'rgs13':          date  users
0  2016-01-18      1
1  2016-01-19      1  
2  2016-01-20      1
3  2016-01-21      1
4  2016-01-22      1
5  2016-01-23      1
6  2016-01-24      0

但是我可以清楚地看到我可以在循环中生成所有数据帧而没有问题。如何让字典保留所有的df?我究竟做错了什么?

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

而不是d = {nodeName:df}使用

d[nodeName] = df

因为这会将键/值对添加到d,而d = {nodeName:df} d重新分配给新的dict(只有一个键/值对) 。在循环中执行该操作会使所有先前的键/值对死亡。

你可能会发现Ned Batchelder的Facts and myths about Python names and values是一本有用的读物​​。它将为您提供思考变量名称和值之间关系的正确心智模型,并帮助您查看哪些语句修改值(例如d[nodeName] = df)与重新分配变量名称(例如d = {nodeName:df})。

答案 1 :(得分:0)

这是因为最终你要重新定义d

你想要的是这个:

d = {}
for num in range(3,14): 
  nodeName = "rgs" + str(num).zfill(2) #The key should be the nodeName
  # Bunch of stuff to get the data ...

  # Fill dataframe
  data = {'date':date_list, 'users':users_list}
  df = pd.DataFrame(data)
  df = df.convert_objects(convert_numeric=True)
  df = df.dropna(subset=['users'])
  df['users'] = df['users'].astype(int)
  d[nodeName] = df 

print d