Pandas创建DataFrame长度为1且不可迭代如何解决
问题根源
你的代码错误出在DataFrame构造这一步:daf=pd.DataFrame({'run1':[n254_1], 'run2':[n254_2]})把pd.read_csv读出来的两个完整DataFrame对象,分别包在单元素列表里作为字典的值传入,pandas会直接把这两个DataFrame实例当成普通的单元格值存储,最终生成的daf只有1行2列,每个格子里塞的是一整个独立的DataFrame,自然长度为1,也无法正常迭代遍历内部数据,和你截图里的输出表现完全一致:
另外你的打印语句也有写法问题:print("length of dataframe %i",len(daf))不会把长度值填充到%i占位符位置,会把字符串和长度值拆成两个独立内容输出。
修复方案
根据你实际的合并需求选对应写法即可:
- 纵向合并(两个txt列结构一致,把两次run的数据上下堆叠到同一张表里)
用pd.concat做纵向拼接,代码参考:import pandas as pd n254_1 = pd.read_csv('input_1.txt') n254_2 = pd.read_csv('input_2.txt') # keys参数自动给数据打来源标签,区分run1、run2的数据 daf = pd.concat([n254_1, n254_2], keys=['run1', 'run2'], names=['data_source']) # 用f-string修正打印逻辑 print(f"length of dataframe {len(daf)}") print(daf) - 横向合并(两个txt数据行一一对应,把两次run的结果作为不同列左右对齐拼接)
确认两个文件行数匹配、对齐逻辑无误后,用横向拼接:import pandas as pd n254_1 = pd.read_csv('input_1.txt') n254_2 = pd.read_csv('input_2.txt') # axis=1指定按列方向拼接,keys给两组数据加列层级标记 daf = pd.concat([n254_1, n254_2], axis=1, keys=['run1', 'run2']) print(f"length of dataframe {len(daf)}") print(daf)
内容的提问来源于stack exchange,提问作者Muna Tageldin
相关产品推荐
相关产品推荐

