使用`locale.atof`时有效处理null / empty值

时间:2017-07-19 06:04:43

标签: python format comma

是否有办法成功导入一个德国/欧洲格式的数字文件(点用逗号代替,反之亦然)?

喂,

我正在尝试导入包含某些数字数据的文件,其中包括德国/欧洲" format,作为使用Python的Pandas中的数据帧。应用了一些函数后,我可以获得英文格式的数据,但有一点小故障。

问题:当缺少值/空值时,我的方法失败。

插图:我有一个巨大的文件,我使用pandas.read_scv和dtype = object在字符串中导入。让我通过

解决这个问题
a=[['1.200,14','4.200'],['7.000','-0,03'],['78','1']]     #Sample Data

df=pandas.DataFrame(a)                        #Conversion to Dataframe
locale.setlocale(locale.LC_ALL, 'deu_deu')    #Changing to German Locale

Out[67]: 'German_Germany.1252'

df.applymap(locale.atof) # Converts String to Float

Out[68]: 
  0 1200.14  4200.00

  1 7000.00    -0.03

  2:   78.00     1.00

现在,eveything OK!

现在,我导入的数据中有一个丢失的值,会出现问题

atof功能 -

a=[['1.200,14','4.200'],['7.000','-0,03'],['78','']]     #Sample Data,with missing value
df=pandas.DataFrame(a)                        #Conversion to Dataframe

locale.setlocale(locale.LC_ALL, 'deu_deu')    #Changing to German Locale

Out[67]: 'German_Germany.1252'

df.applymap(locale.atof) # Converts String to Float

Out[68]: 
  0 1200.14  4200.00

  1 7000.00    -0.03

  2:   78.00     

df.applymap(locale.atof) # Converts String to Float, and I get a 
ValueError: ('could not convert string to float: ', 'occurred at index 1')

可以理解,这是因为空值不是作为字符串导入的,而是使用FLOAT导致,因此会导致错误。

如何规避涉及缺失值的问题?

我尝试用逗号代替dot,反之亦然,例如str.replace('。''')。替换('。',& #39;。')结合lambda函数并将其应用于每一列,但操作成本非常高且非常不整洁。

有关如何通过使用区域设置方法或其他方法解决此问题的任何建议吗?编写一个函数并使用lambda / map解决了这个问题,但它非常昂贵。我相信有更好的方法。在SAS中有类似于COMMAX12.2的信息,其中X表示德语格式,并且它可以快速成功导入。 Pandas / Python中有类似的东西吗?

非常感谢评论。

0 个答案:

没有答案