【问题标题】:Retrieve delimiter infered by read_csv in pandas检索由 read_csv 在 pandas 中推断的分隔符
【发布时间】:2018-01-25 17:05:49
【问题描述】:

使用自动分隔符检测配置读取 csv 文件 (pd.read_csv(file_path, sep=None)) 时,pandas 会尝试推断分隔符(或分隔符)。

有没有办法检索此推断的结果(最终用于sep 的值)?

编辑

我正在专门寻找一种使用由read_csv 返回的pandas 对象的方法。我使用的是 0.20.2 版的 pandas。

【问题讨论】:

    标签: python pandas csv


    【解决方案1】:

    如果您只想检测 csv 的方言(不加载数据),您可以使用内置的 csv.Sniffer 标准:

    Sniffer 类用于推断 CSV 文件的格式。

    特别是sniff 方法:

    sniff(sample, delimiters=None)
    

    分析给定的样本并返回反映 找到的参数。如果给出了可选的分隔符参数,它是 解释为包含可能的有效分隔符的字符串 字符。

    以下是它的用法示例:

    with open('example.csv', 'r') as csvfile:
        dialect = csv.Sniffer().sniff(csvfile.readline())
        print(dialect.delimiter)
    

    【讨论】:

      【解决方案2】:

      我认为您无需导入csv就可以做到这一点:

      reader = pd.read_csv(file_path, sep = None, iterator = True)
      inferred_sep = reader._engine.data.dialect.delimiter
      

      编辑:

      忘记了 iterator = True 参数。

      【讨论】:

      • 这是我正在寻找的答案类型,但不幸的是它不起作用。我得到:AttributeError: 'DataFrame' object has no attribute '_engine'。我使用的是 0.20.2 版的 pandas。
      • 出于兴趣,reader = pd.read_csv(file_path, sep = None, engine = 'python') 工作得更好吗?
      • 不,我仍然有同样的错误。这是否适用于以前版本的 pandas?
      • 抱歉,试试reader = pd.read_csv(file_path, sep = None, iterator = True)
      • 所以这可以检索分隔符,但 reader 对象不再是 pandas.DataFrame 对象。相反,如果键入pandas.io.parsers.TextFileReader。知道如何在返回 pandas.DataFrame 的同时执行此操作吗?
      【解决方案3】:

      csv.Sniffer

      Sniffer 类用于推断 CSV 文件。

      嗅探(样本,分隔符=无)

      分析给定的样本并返回一个 反映找到的参数的方言子类。如果可选 给定 delimiters 参数,它被解释为一个字符串 包含可能的有效分隔符。


      Dialect.delimiter

      用于分隔字段的单字符字符串。它 默认为','

      import csv
      
      sniffer = csv.Sniffer()
      dialect = sniffer.sniff('first, second, third, fourth')
      print dialect.delimiter
      

      【讨论】:

        猜你喜欢
        • 2017-05-05
        • 2018-07-21
        • 1970-01-01
        • 1970-01-01
        • 2017-10-25
        • 2015-09-20
        • 2012-08-19
        • 2018-07-12
        • 1970-01-01
        相关资源
        最近更新 更多