2017-08-17 75 views
4

當使用自動分隔符檢測配置讀取csv文件(pd.read_csv(file_path, sep=None))時,熊貓會嘗試推斷分隔符(或分隔符)。在pandas中通過read_csv檢索分隔符傳遞

有沒有辦法檢索這個推斷的結果(最終用於sep的值)?

編輯

我對於使用由read_csv返回的大熊貓對象的方法專門找。我使用版本0.20.2的熊貓。

回答

3

如果你想要做的就是檢測CSV的話(而無需在數據加載),您可以使用內置的csv.Sniffer標準:

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

尤其是sniff方法:

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.

下面是它的用法的例子:

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

我想你可以做到這一點,而無需導入csv

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

編輯:

忘記了iterator = True說法。

+0

這是答案的我一直在尋找的類型,但遺憾的是它不工作。 我得到:'AttributeError:'DataFrame'對象沒有屬性'_engine'。 我使用版本0.20.2的熊貓。 –

+0

出於興趣,'reader = pd.read_csv(file_path,sep = None,engine ='python')'工作得更好嗎? – RHSmith159

+0

恩,不,我仍然有同樣的錯誤。這是否與以前版本的熊貓一起工作? –

0

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 
相關問題