尝试使用 locale.atof() 更改数据帧中的小数周期以使用 pivot_tables 进行转换

Trying to use locale.atof() for changing the period in decimals within a dataframe to convert using pivot_tables

假设我有一个如下所示的数据框。 Value 列中的值是小数。

df.head()

         ID Key Value
0   A0AVT1  MAHA    4842000
1   A0FGR8  MAHA    3522710
2   A0JLT2  MAHA    283,433
3   A0JNW5  MAHA    356,09677
4   A0MZ66  CEB 37,5
5   A0PJW6  CEB 487,03677
6   A1AG    CEB 10,625567
7   A1L0T0  HAC 12
8   A1L390  HAC 63,946
9   A1X283  HAC 138,25

我想使用 pandas pivot_tables 来转换上面的数据框,方法是使用 ID 作为索引,使用 Key 作为列值来自列 Value。所以我尝试了以下一种衬垫:

df2.reset_index().pivot_table(values='Value',index='ID',columns='Key')

但是,上面的一个衬里抛出了这个数据错误:

~/software/anaconda/lib/python3.7/site-packages/pandas/core/groupby/groupby.py in _cython_agg_blocks(self, how, alt, numeric_only, min_count)
   4042 
   4043         if len(new_blocks) == 0:
-> 4044             raise DataError('No numeric types to aggregate')
   4045 
   4046         # reset the locs in the blocks to correspond to our

DataError: No numeric types to aggregate

此外,我尝试使用模块 locale 转换数据框 dfValue 列中的 ,。这是我尝试过的:

import locale
locale.setlocale(locale.LC_ALL, 'de_DE') #Germany
df.Value.astype(str).apply(locale.atof)

它抛出错误:

TypeError: data type not understood 

我试过使用 astype (float)。它没有改变任何东西。

任何 help/suggestions 非常感谢! 谢谢。

正确设置locale的通用方法是让系统从环境中找到:

locale.setlocale(locale.LC_NUMERIC, '')

这在我的机器上产生:

>>> locale.setlocale(locale.LC_NUMERIC, '')
'de_DE.UTF-8'
>>> df.Value.apply(locale.atof)
0    4.842000e+06
1    3.522710e+06
2    2.834330e+02
3    3.560968e+02
4    3.750000e+01
5    4.870368e+02
6    1.062557e+01
7    1.200000e+01
8    6.394600e+01
9    1.382500e+02

如果您想明确设置语言环境,则必须为 Linux 和 Windows 使用不同的语言环境字符串:

Linux:

locale.setlocale(locale.LC_NUMERIC, 'de_DE.UTF8')   # or 'de_DE.UTF-8'

Windows:

locale.setlocale(locale.LC_NUMERIC, 'German') # or 'de' or 'deu' (case insensitive)