python - 为什么将数据框传递给 list.extend() 会导致仅列名存储在列表中?
问题描述
我需要存储在字典中的几个数据框的列名列表。事实证明,我不小心得到了想要的结果,但我认为代码会以不同的方式工作。有人可以解释为什么这段代码有效吗?
最初的想法:遍历字典键,将值(数据帧)添加到目标列表->获取数据帧列表-> [以某种方式]从数据帧中提取列名。
什么有效:遍历字典键,将值(数据帧)添加到目标列表->获取数据帧列名列表,无需进一步。
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]
太棒了,但为什么呢?
解决方案
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])
推荐阅读
- c++ - 保存结构图
- java - 为什么程序会在特定智能手机上引发 OutOfMemoryError?
- python - psycopg2.ProgrammingError:没有要获取的结果
- excel - Microsoft Excel 和 Google 表格
- javascript - 在忽略嵌套数组的同时深度合并两个不可变映射
- c++ - 如何在 c++ 中正确输出带有 if 状态的二维数组?
- angular - Angular - 在通过formdata创建条目期间上传文件
- reactjs - 如何在 google-maps-react 中将 InfoWindow 添加到我的标记?
- r - 如何在 Rmarkdown 中调整此表的大小?
- javascript - 显示所有按钮 - JSX 逻辑