Retrieve delimiter infered by read_csv in pandas

Deadly 提交于 2020-08-22 04:25:10

问题


When using the configuration for automatic separator detection to read csv files (pd.read_csv(file_path, sep=None)), pandas tries to infer the delimiter (or separator).

Is there a way to retrieve the result of this inference (the value that was finally used for sep)?

EDIT

I am looking specifically for a method that uses the pandas object that is returned by read_csv. I use version 0.20.2 of pandas.


回答1:


I think you can do this without having to import csv:

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

EDIT:

Forgot the iterator = True argument.




回答2:


If all you want to do is detect the dialect of a csv (without loading in your data), you can use the inbuilt csv.Sniffer standard:

The Sniffer class is used to deduce the format of a CSV file.

In particular, the sniff method:

sniff(sample, delimiters=None)

Analyze the given sample and return a Dialect subclass reflecting the parameters found. If the optional delimiters parameter is given, it is interpreted as a string containing possible valid delimiter characters.

Here's an example of its usage:

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



回答3:


csv.Sniffer

The Sniffer class is used to deduce the format of a CSV file.

sniff(sample, delimiters=None)

Analyze the given sample and return a Dialect subclass reflecting the parameters found. If the optional delimiters parameter is given, it is interpreted as a string containing possible valid delimiter characters.


Dialect.delimiter

A one-character string used to separate fields. It defaults to ','

import csv

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


来源:https://stackoverflow.com/questions/45732459/retrieve-delimiter-infered-by-read-csv-in-pandas

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!