【问题标题】:Delimiter of read csv is in text field读取 csv 的分隔符在文本字段中
【发布时间】:2022-02-09 21:38:32
【问题描述】:

我从服务器收到提取的数据,问题是提取有分隔符“;”在 csv 文件中。

我使用以下命令读取文件夹:

files = glob.glob(r"path/*.csv")
dfs = [pd.read_csv(f, sep=";", engine='c') for f in files]
df2 = pd.concat(dfs,ignore_index=True)

输出是:


columnA    columnB .... columnT columnU
2000        A      ....  I wish  NaN
1000        B     ....   that    NaN
this ends   NaN   ....    NaN    NaN
3000        A     .....    I      DUU
...

第 3 行的文本属于第 2 行的 columnT。到目前为止,我只能删除所有奇怪的行,如第 4 行,但我无法保留该信息。

df2.dropna(subset=['columnB'], how='all', inplace=True)

如何正确读取文件?问题是,在文本中的文本字段 columnT 中,它也使用“;”作为普通角色。

原文为(csv):

columnA;    columnB; .... columnT;          columnU:
2000;        A;      ....  I wish;            NaN;
1000;        B;     ....   that; this ends;    NaN;
3000;        A;     .....    I;               DUU;

【问题讨论】:

  • 我想说这很困难,对于任何进程,如果分隔符故意设置为;,那么; 的文本版本中的.csv 将始终可见作为新的列指标。您很可能需要在转换前清理文件。您是否可以从服务器访问转换/提取过程?看看你能不能得到带有不同分隔符的.csv
  • 您能否将您的 csv 文件的摘录显示为 纯文本(如果需要,可以使用假数据),其中至少包含标题行和包含有问题数据的行之一.没有它,我无法猜测这是否只是一个配置问题,或者文件是否已不可挽回地损坏,或者是否存在可能的解决方法。请不要显示电子表格中发生的情况,而是显示在记事本、vi 或任何其他文本编辑器中发生的原始内容。
  • 我将其添加为小摘录
  • 不,你没有。您的代码使用 sep=';' 读取 csv,而您显示为 csv 的内容不包含任何 ;。我要求您提供原始内容不是为了打扰您,而是因为为了能够帮助您,我需要确切了解文件中的分隔符和引号是如何使用的。
  • 知道了,我现在添加了它

标签: python pandas csv text


【解决方案1】:

我不知道解决此问题的编程方法(请参阅我的评论),但出于兴趣,我快速搜索了一下Escaping quotes and delimiters in CSV files with Excel。也许你也可以试试。即,手动或以编程方式,将所有单引号替换为双引号,然后再次尝试您的代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-09
    • 1970-01-01
    • 2019-12-07
    • 1970-01-01
    • 1970-01-01
    • 2015-11-01
    • 1970-01-01
    相关资源
    最近更新 更多