使用时有效地处理空值`区域设置.atof`

2024-04-30 04:47:55 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有办法成功导入一个带有德语/欧洲格式数字的文件(点替换为逗号,反之亦然)?你知道吗

你好

我正在尝试导入一个包含一些“德语/欧洲”格式的数字数据的文件,作为使用Python的Pandas中的数据帧。在应用了一些函数之后,我可以得到英文格式的数据,但是有一点小问题。你知道吗

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

插图:我有一个巨大的文件,我用字符串导入它熊猫.read\scvdtype=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

到现在,一切都好!你知道吗

现在,如果我导入的数据中缺少一个值,那么

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导入的,因此会导致错误。你知道吗

我怎样才能避免这个涉及缺失值的问题?你知道吗

我试着用逗号代替点,反之亦然结构更换('.','')。将('.','.')与lambda函数一起替换,并将其应用于每一列,但这是非常昂贵的操作,而且非常不整洁。你知道吗

有什么建议我可以解决这个问题,或者使用locale方法或者其他方法?编写一个函数并使用lambda/map解决了这个问题,但是代价非常高昂。我相信有更好的方法。在SAS中有类似于COMMAX12.2的信息,其中X表示德语格式,成功导入到那里非常容易。熊猫和Python有相似之处吗?你知道吗

敬请指正。你知道吗


Tags: 文件to数据方法函数dfstring格式