【问题标题】:How can I read a double-semicolon-separated .csv with quoted values using pandas?如何使用 pandas 读取双分号分隔的 .csv 和引用值?
【发布时间】:2019-04-04 10:13:27
【问题描述】:

我分析了大量的金融数据集,这些数据集经常因为数据字段损坏而给我带来麻烦。幸运的是,在不久的将来,我有机会改变向我提供数据的方式。数据将作为双分号分隔的 txt 文件传递​​,其中的字段用双引号括起来,即 "A";;"B";;"C"

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

我尝试将 quotechar='"' 作为参数传递并引用=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()

【问题讨论】:

  • 你能创建一个几行的虚拟数据集,上传它(最好在你的 github 上)并在此处链接,我对你的数据集的外观有一些巨大的困惑,因此不想为可能不是问题的问题创建一个解决方案,据我所知,我会将整个 CSV 作为字符串读取,使用一些正则表达式魔法并将其转换为适当的 csv,但我认为我如果您可以创建一个虚拟数据集,则可以为您提供更确凿的信息。
  • 你可以试试df.apply(lambda s:s.str.replace('"', "")),其中 df 是你的数据框。

标签: python pandas


【解决方案1】:

这是一个错误,当 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: []

【讨论】:

  • 感谢 EdChum。所以这意味着我要么必须在引号中使用单分号分隔的数据,要么使用不带引号的双分号分隔的数据。
  • 是的,没错,使用 python 引擎时似乎忽略了引用参数。根据您的数据大小,无论如何通过传递单个字符作为分隔符,使用“c”引擎加载它可能会更快。你们可以通过用逗号替换双分号来预处理文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-20
  • 2018-04-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-28
  • 2018-05-04
  • 1970-01-01
相关资源
最近更新 更多