数据帧字典未保存

2024-03-28 09:07:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在尝试创建一个数据帧字典,以便存储来自不同文件的数据。我在下面的循环中创建了一个dataframe,我希望将它们聚合起来,使每个dataframe都包含在字典中。我得晚些时候加入他们。你知道吗

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

但我可以清楚地看到,我可以生成所有的数据帧,而不会在循环中出现问题。我怎样才能使这本词典保留所有的词典?我做错什么了?你知道吗

谢谢你的帮助。你知道吗


Tags: 文件the数据convertdataframedffordata
2条回答

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

d[nodeName] = df

因为这会将一个键/值对添加到d,而d = {nodeName:df}会将d重新分配到一个新的dict(只有一个键/值对)。在循环中这样做会导致前面所有的键/值对死亡。你知道吗

你可能会发现内德·巴奇尔德的Facts and myths about Python names and values是一本有用的书。它将为您提供思考变量名和值之间关系的正确心理模型,并帮助您了解哪些语句修改值(例如d[nodeName] = df)而不是重新分配变量名(例如d = {nodeName:df})。你知道吗

这是因为最终你在重新定义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

相关问题 更多 >