为什么将数据帧传递到list.extend()导致仅将列名称存储在列表中?

时间:2019-09-09 19:18:14

标签: python pandas list dataframe

我需要存储在字典中的几个数据框的列名列表。事实证明,我意外地得到了预期的结果,但是我认为代码会以不同的方式工作。有人可以解释为什么此代码有效吗?

最初的想法:遍历字典键,向目标列表添加值(数据框)->获取数据框列表-> [以某种方式]从数据框中提取列名。

有效的方法:遍历字典键,将值(数据框)添加到目标列表->获取数据框列名称的列表,无需任何其他操作。

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]

太棒了,为什么?

1 个答案:

答案 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])