【问题标题】:reading multiple files with glob duplicates columns读取具有 glob 重复列的多个文件
【发布时间】:2019-11-19 10:31:47
【问题描述】:

我正在尝试将许多 txt 文件读入我的数据框中,并且此代码在下面有效。但是,它复制了我的一些专栏,而不是全部。我找不到解决方案。我能做些什么来防止这种情况发生?

import pandas as pd
import glob

dfs = pd.DataFrame(pd.concat(map(functools.partial(pd.read_csv, sep='\t', low_memory=False),
                    glob.glob(r'/folder/*.txt')), sort=False))

假设我的数据应该如下所示:

enter image description here

但它看起来像这样: enter image description here

我不希望我的列被复制。

【问题讨论】:

  • 请提供一些输入和输出以便有效地追踪问题。
  • 重复是什么意思?你的意思是一个文件的输入出现多次? 'glob.glob(r'/folder/*.txt')' 生成的列表是否具有所需的内容?通过首先创建列表并遍历它并对重复列发出警告来拆分步骤可能会有所帮助,这样您就可以看到哪里出了问题。

标签: python python-3.x pandas dataframe glob


【解决方案1】:

您能给我们提供更多信息吗?尤其是dfs.columns 的输出会很有用。我怀疑您的列名中可能有一些额外的空格,这会导致 pandas 在它们之间有所不同。

您也可以为此尝试 dask:

import dask.dataframe as dd

dfs = dd.read_csv(r'/folder/*.text, sep='\t').compute()

有点简单,应该给出相同的结果

【讨论】:

  • 感谢您的回答。我正在尝试删除我的代码创建的重复列。通常它不应该重复任何列,我应该有 52 列,但我有 58 列。
  • 能否提供 dfs.columns 的输出?可能是您的 csv 包含 'A' 和 'A ',因此看起来相同,但列名不同。重复列中的值是否也相同,或者总是缺少一半?
【解决方案2】:

重要的是要考虑 concat 过程有两种可能的结果。通过选择轴,您可以添加新列,如下面的示例 (I) 或示例 (II) 中所示的新行。 pd.concat 允许您通过将轴设置为 0(行)或 1(列)来执行此操作。

在优秀的文档中阅读更多内容:concat

示例一:

import pandas as pd
import glob

pd.concat([pd.read_csv(f) for f in glob.glob(r'/folder/*.txt')], axis=1)

示例二:

pd.concat([pd.read_csv(f) for f in glob.glob(r'/folder/*.txt')], axis=0)

【讨论】:

  • 感谢您的回答。我正在尝试删除我的代码创建的重复列。通常它不应该重复任何列,我应该有 52 列,但我有 58 列。
猜你喜欢
  • 2019-02-06
  • 1970-01-01
  • 2016-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多