如何使用pandas读取带引号的双分号分隔的.csv?

时间:2019-04-04 10:13:28

标签: python pandas

我分析了庞大的财务数据集,这些数据集经常由于数据字段损坏而给我带来麻烦。幸运的是,在不久的将来,我将有机会改变向我传递数据的方式。数据将以双分号分隔的txt文件形式传递,其中的字段用双引号引起来,即“ A” ;;“ B” ;;“ C”

但是,在使用pandas的read_csv将文件转换为pandas df时,pandas似乎不能识别双引号,只能识别双分号分隔符。因为输出看起来像:“ A”“ B”“ C”,而不是A B C

我尝试传递quotechar ='“'作为参数并引用quoting = csv.QUOTE_ALL,但这并没有任何改变。

import pandas as pd
import csv


def create_df(loc):
    df = pd.read_csv(loc, sep=';;', dtype=object, encoding="ISO-8859-1", quotechar='"', quoting=csv.QUOTE_ALL, header=None)
    return df


directory = 'C:\\PycharmProjects\\Test\\'
file = directory + 'test;;qq;;.txt'

df = create_df(file)

writer = pd.ExcelWriter('test.xlsx')
df.to_excel(writer, 'test')
writer.save()

1 个答案:

答案 0 :(得分:0)

pandas由于分隔符不是单个字符而必须使用python引擎时,这是一个错误,如果传递单个字符分隔符,则它将正确导入并解析这些列,但是最后还有其他列:

In[80]:
import csv
t='''"A";;"B";;"C"'''
df = pd.read_csv(io.StringIO(t), sep=';', quoting=csv.QUOTE_ALL)
df
Out[80]: 
Empty DataFrame
Columns: [A, Unnamed: 1, B, Unnamed: 3, C]
Index: []

然后您可以通过过滤删除多余的列:

In[81]:
df = df.loc[:,~df.columns.str.contains('Unnamed:')]
df
Out[81]: 

Empty DataFrame
Columns: [A, B, C]
Index: []