Python 如何在csv文件中将字符串转换为浮点

Python 如何在csv文件中将字符串转换为浮点,python,flask,Python,Flask,大家好,我想将某些列中的字符串转换为csv文件中的浮点值,但我不知道如何显式执行,我已经编写了一些代码,但它不起作用: with open(file_path, "rt") as csv_file: content = csv.reader(csv_file,delimiter=';') for row in content: values = [] for column in row:

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

    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美元;承租人;德语;N1.25-29;德语;1第三PL单元703;钙;长滩;;洛杉矶;90802;$7.00 - $7.99;7天;调频;0;CircAdm

错误是:

ValueError:无法将字符串转换为浮点:'$30000-$39999;承租人;德语;N1.25-29;德语;1第三PL单元703;钙;长滩;;洛杉矶;90802;$7.00 - $7.99;7天;调频;0;CircAdm'

使用

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'}]

如果您的csv文件中有一组行,则使用熊猫可能是执行此任务的合适方式

下面是一个示例,如何将“$30000-$39999”转换为类似“30000.0”、“39999.0”这样的浮动代码:

将数据从csv读取到DataFrame 在数据帧中处理数据 将数据帧保存到文件
它给了我更多类似这样的错误==>TypeError:无法将google.protobuf.Value.number\u值设置为'$30000-$39999;承租人;德语;N1.25-29;德语;1第三PL单元703;钙;长滩;;洛杉矶;90802;$7.00 - $7.99;7天;调频;0;约$30000-39999;承租人;德语;N1.25-29;德语;1第三PL单元703;钙;长滩;;洛杉矶;90802;$7.00 - $7.99;7天;调频;0;CircAdm'具有类型,但字段值应为以下类型之一:(,).number\u valuei已更新您的代码。你能查一下吗。还放了输出给我这个==>ValueError:无法将字符串转换为浮点:'$30000-$39999;承租人;德语;N1.25-29;德语;1第三PL单元703;钙;长滩;;洛杉矶;90802;$7.00 - $7.99;7天;调频;0;啊!看起来,区别在于,csv文件。我之所以看到这个错误,是因为变量列将完整的行作为字符串。未使用分隔符“;”分析字符串这是我使用的csv文件的内容$30 ,000 - $39,999;承租人;德语;N1.25-29;德语;1第三PL单元703;钙;长滩;;洛杉矶;90802;$7.00 - $7.99;7天;调频;0;这与您在问题中提供的数据相同。如果您可以共享2或3行数据,我可以再次检查我不知道如何使用上面的代码来实现这一点,您可以用我的代码来编写这一点吗,因为我想在有效负载变量中获得一个列表,如果您能够做到这一点,那将非常令人惊讶,因为我是python新手:)
[{'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'}]
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')