【问题标题】:Problems to read german csv file in python在 python 中读取德语 csv 文件的问题
【发布时间】:2019-12-22 14:39:17
【问题描述】:

我有一个德语 csv 文件,我想用pd.read_csv 阅读它。

数据:

原始文件如下所示:

所以它有两列(A,B),分隔符应该是';'

问题: 当我运行命令时:

dataset = pd.read_csv('C:/Users/.../GermanNews/articles.csv',
                      encoding='utf-8', header=None, sep=';')

我得到错误: ParserError: Error tokenizing data. C error: Expected 2 fields in line 3, saw 3

半解: 我知道这可能有几个原因,但是当我运行命令时:

dataset = pd.read_csv('C:/Users/.../GermanNews/articles.csv',
                      encoding='utf-8', header=None, sep='delimiter')

我得到以下数据集:

    0
0   Etat;Die ARD-Tochter Degeto hat sich verpflich...
1   Etat;App sei nicht so angenommen worden wie ge...
2   Etat;'Zum Welttag der Suizidprävention ist es ...
3   Etat;Mitarbeiter überreichten Eigentümervertre...
4   Etat;Service: Jobwechsel in der Kommunikations...

所以我只得到一列而不是两列,

目标: 知道如何正确加载我拥有的数据集:

    0       1
0   Etat    Die ARD-Tochter Degeto hat sich verpflich...
1   Etat    App sei nicht so angenommen worden wie ge...

提示/尝试:

当我在 excel 中对我的数据运行搜索功能时,我也没有在其中找到任何 ;

似乎有些行有两列以上(例如,您可以在我的示例的第 3 行和第 13 行中看到

【问题讨论】:

  • 有没有;在您的一个句子中被误解为分隔符?
  • 我在excel中搜索了数据集,没有其他的;在我的数据集中
  • 也许下面的链接已经提供了答案:stackoverflow.com/questions/18039057/…
  • 在您的 Excel 屏幕截图中显示,第三行已被分成三列,因此它还在那里找到了它认为是分隔符的东西。可以分享前三行的全文吗?

标签: python pandas csv


【解决方案1】:

仔细浏览您的文本。如果您没有找到任何线索,请按照以下解决方案进行操作。


注意:这不是一个完美的解决方案,而是一个 hack,并且在我使用德语文本时多次为我工作,因为我没有找到其他解决方案。

我只是这样阅读整个内容,并通过在第一次出现分隔符时将字符串拆分为两个所需的列。

df['col1'] = df[0].str.split(';', 1).str[0]
df['col2'] = df[0].str.split(';', 1).str[1]

输出:

                            0    col1                   col2
0        Etat;Die ARD-Tochter..  Etat        Die ARD-Tochter
1         Etat;App sei nicht...  Etat          App sei nicht 
2  Etat;Mitarbeiter überreich..  Etat  Mitarbeiter überreich

我只是修剪了文本以演示示例。

【讨论】:

    【解决方案2】:

    一种可能的解决方案是创建一列DataFrame,其分隔符不在delimiter 之类的数据中,然后将Series.str.splitn 参数和expand=True 用于新的DataFrame

    dataset = pd.read_csv('C:/Users/.../GermanNews/articles.csv',
                           encoding='utf-8', header=None, sep='delimiter')
    
    #more general solution is use some value NOT exist in data like yen ¥
    #dataset = pd.read_csv('C:/Users/.../GermanNews/articles.csv',
    #                      encoding='utf-8', header=None, sep='¥')
    
    df = dataset[0].str.split(';', n=1, expand=True)
    df.columns = ['A','B']
    print (df)
    

    【讨论】:

      【解决方案3】:

      这对我有用:

      import pandas as pd
      df = pd.read_csv('german.txt', sep=';', header = None, encoding='iso-8859-1')
      df
      

      输出:

             0    1
      0   Etat    Die ARD-Tochter Degeto hat sich verpflich...
      1   Etat    App sei nicht so angenommen worden wie ge...
      2   Etat    'Zum Welttag der Suizidprävention ist es ...
      3   Etat    Mitarbeiter überreichten Eigentümervertre...
      4   Etat    Service: Jobwechsel in der Kommunikations...
      

      【讨论】:

      • 抱歉,这不起作用,因为我的原始数据框中有 3 列,而不仅仅是 2
      猜你喜欢
      • 1970-01-01
      • 2014-12-01
      • 1970-01-01
      • 2015-09-30
      • 2019-03-18
      • 1970-01-01
      • 1970-01-01
      • 2022-08-18
      相关资源
      最近更新 更多