Pandas read_csv不转换带有千位分隔符和小数分隔符的数字

eh57zj3b  于 2023-03-06  发布在  其他
关注(0)|答案(1)|浏览(165)

我正在尝试读取格式为"1,234.56"的十进制值的csv文件。
我当前的代码如下所示:

filepath = 'original_data'
filename = 'Real_Verbrauch_DE_201501010000_202303042359_Viertelstunde.csv'
dateparse = lambda x: datetime.strptime(x, '%d.%m.%Y')
csv_path = os.path.join(filepath, filename)

df_original = pd.read_csv(
        csv_path, 
        sep = ';', 
        thousands = '.', 
        decimal = ',', 
        parse_dates = ['Datum'], 
        date_parser = dateparse, 
        dtype = {
            'Gesamt (Netzlast) [MWh] Originalauflösungen': float, 
            'Residuallast [MWh] Originalauflösungen': float,
            'Pumpspeicher [MWh] Originalauflösungen': float
        }
    )

使用此代码,我得到以下错误:

ValueError: could not convert string to float: '11.118,75'

如果删除dtype-parameter,转换只对某些值有效。
如果可能的话,我希望避免使用replace('.','').replace(',','.')之类的解决方法,因为这会引入其他问题。
csv文件中行的标题和示例:

Datum;Anfang;Ende;Gesamt (Netzlast) [MWh] Originalauflösungen;Residuallast [MWh] Originalauflösungen;Pumpspeicher [MWh] Originalauflösungen
01.01.2015;00:00;00:15;11.210;9.051,75;123
10.04.2015;18:30;18:45;15.066,75;13.858,25;44,75

我应该如何调整我的代码,使最后三列中的所有值都转换为浮点类型?

ghhkc1vu

ghhkc1vu1#

运行代码后,一切都按预期运行。也许您使用的是旧版本的Pandas:

>>> df_original
       Datum Anfang   Ende  Gesamt (Netzlast) [MWh] Originalauflösungen  Residuallast [MWh] Originalauflösungen  Pumpspeicher [MWh] Originalauflösungen
0 2015-01-01  00:00  00:15                                     11210.00                                 9051.75                                  123.00
1 2015-04-10  18:30  18:45                                     15066.75                                13858.25                                   44.75

>>> df_original.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2 entries, 0 to 1
Data columns (total 6 columns):
 #   Column                                       Non-Null Count  Dtype         
---  ------                                       --------------  -----         
 0   Datum                                        2 non-null      datetime64[ns]
 1   Anfang                                       2 non-null      object        
 2   Ende                                         2 non-null      object        
 3   Gesamt (Netzlast) [MWh] Originalauflösungen  2 non-null      float64       
 4   Residuallast [MWh] Originalauflösungen       2 non-null      float64       
 5   Pumpspeicher [MWh] Originalauflösungen       2 non-null      float64       
dtypes: datetime64[ns](1), float64(3), object(2)
memory usage: 224.0+ bytes

>>> pd.__version__
'1.5.3'

相关问题