我需要存储在字典中的几个数据框的列名列表。事实证明,我意外地得到了预期的结果,但是我认为代码会以不同的方式工作。有人可以解释为什么此代码有效吗?
最初的想法:遍历字典键,向目标列表添加值(数据框)->获取数据框列表-> [以某种方式]从数据框中提取列名。
有效的方法:遍历字典键,将值(数据框)添加到目标列表->获取数据框列名称的列表,无需任何其他操作。
list1 = []
list2 = []
list3 = []
for key in dfDict.keys():
# each dfDict key has a value tuple of 3 dataframes --> key: (df1,df2,df3)
list1.extend(dfDict[key][0]) # for df1
list2.extend(dfDict[key][1]) # for df2
list3.extend(dfDict[key][2]) # for df3
预期:
list1 = [df1]
list2 = [df2]
list3 = [df3]
实际:
list1 = [df1.columns]
list2 = [df2.columns]
list3 = [df3.columns]
太棒了,为什么?
答案 0 :(得分:0)
list.extend
遍历其参数,而DataFrame.__iter__
遍历数据框的列名。没有更多的东西了。
df = pd.DataFrame([], columns=['a', 'b'])
print([col_name for col_name in df])
输出
['a', 'b']
这有点类似于dict.__iter__
遍历键。
df[col] for col in df
表现与“相同”
dict[key] for key in dict
在每种情况下,都应使用append
(并且如上所述,您不必显式使用.keys
)
for key in dfDict:
list1.append(dfDict[key][0])
list2.append(dfDict[key][1])
list3.append(dfDict[key][2])