如何在csv-fi中将字符串转换为浮点

2024-03-28 01:26:48 发布

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

大家好,我想将某些列中的字符串转换为csv文件中的float,但我不知道如何显式执行,我编写了一些代码,但不起作用:

    with open(file_path, "rt") as csv_file:
        content = csv.reader(csv_file,delimiter=';')
        for row in content:
            values = []
            for column in row:
                values.append({'number_value': float(column)})
            payload = {
                'row': {'values': values}
            }

            response = prediction_client.predict(model_full_id, payload)
            print("Prediction results:")
            for result in response.payload:
                print("Predicted class name: {}".format(result.display_name))
                print("Predicted class score: {}".format(result.classification.score))

我的csv文件中的行:

30000-39999美元;租客;德语;N;1;25-29;德语;1 3RD PL UNIT 703;CA;长滩;洛杉矶;90802;7.00-7.99美元;7天;FM;0;CircAdm

错误是:

ValueError: could not convert string to float: '$ 30,000 - $39,999;RENTER;German;N;1;25-29;German;1 3RD PL UNIT 703;CA;LONG BEACH;LOS ANGELES;90802;$7.00 - $7.99;7Day;FM;0;CircAdm'


Tags: 文件csvinforresponsecolumnresultcontent
5条回答

如果您的csv文件中有一组行,那么使用Pandas可能是执行此任务的合适方法。你知道吗

下面是一个示例,如何将“$30000-$39999”转换为浮点数,如“30000.0”,“39999.0”下面是代码:

从csv读取数据到DataFrame

import pandas as pd
df = pd.read_csv('test.csv', sep = ';', header = None)
print(df)


Out[1]:

                  0        1       2  3   4      5       6                  7   \
0  $30,000 - $39,999  RENTER  German  N   1  25-29  German  1 3RD PL UNIT 703   

   8           9            10     11             12    13  14  15       16  
   CA  LONG BEACH  LOS ANGELES  90802  $7.00 - $7.99  7Day  FM   0  CircAdm  

在数据帧中处理数据

df = pd.concat([df[df.columns[1:]], df[0].replace('[$|,]', value='', regex = True).str.split(r'[$-]', expand = True).astype(float).rename(columns = {0:'price1', 1: 'price2'})], axis = 1)
print(df)



Out[2]:

        1       2  3  4      5       6                  7   8           9  \
0  RENTER  German  N  1  25-29  German  1 3RD PL UNIT 703  CA  LONG BEACH   

            10     11             12    13  14  15       16   price1   price2  
   LOS ANGELES  90802  $7.00 - $7.99  7Day  FM   0  CircAdm  30000.0  39999.0  

# here it is become 'price1' and 'price2'

将数据帧保存到文件

df.to_csv('test_out.csv')

使用

if column.isdigit():
      column = float(column)
values.append({'number_value': column})

isDigit()将标识字符串是否为数字。你知道吗

如果列是数字,则可以执行转换操作

import csv
with open('test.csv', "rt") as csv_file:
    content = csv.reader(csv_file,delimiter=';')
    for row in content:
        values = []
        for column in row[0].split(";"):
            if column.isdigit():
                column = float(column)
            values.append({'number_value': column})
        payload = {
            'row': {'values': values}
        }

print (values)

输出:

[{'number_value': '$30,000 - $39,999'}, {'number_value': 'RENTER'}, {'number_value': 'German'}, {'number_value': 'N'}, {'number_value': 1.0}, {'number_value': '25-29'}, {'number_value': 'German'}, {'number_value': '1 3RD PL UNIT 703'}, {'number_value': 'CA'}, {'number_value': 'LONG BEACH'}, {'number_value': 'LOS ANGELES'}, {'number_value': 90802.0}, {'number_value': '$7.00 - $7.99'}, {'number_value': '7Day'}, {'number_value': 'FM'}, {'number_value': 0.0}, {'number_value': 'CircAdm'}]

相关问题 更多 >