首页 > 解决方案 > CSV Column Bool 转换问题

问题描述

{
"First Name": "Jonathan",
"Last Name": "Thomas",
"Marital Status": "married or civil partner",
"Sex": "Male",
"Age (Years)": 46,
"Retired": true,
"Distance Commuted to Work (miles)": 13.72,
"Employer Company": "Begum-Williams",
"Dependants": 1,
"Yearly Salary (\u00c2\u00a3)": 54016,
"Yearly Pension (\u00c2\u00a3)": 0,
"Address Street": {
  "Address Street": "00 Wheeler wells",
  "Address City": "Chapmanton",
  "Address Postcode": "L2 7BT"
},
"Credit Card Number": {
  "Credit Card Number": "4529436854129855",
  "Credit Card Start Date": "08/12",
  "Credit Card Expiry Date": "11/26",
  "Credit Card CVV": 583,
  "Bank IBAN": "GB37UMCO54540228728019"
},
"Vehicle Make": {
  "Vehicle Make": "Nissan",
  "Vehicle Model": "ATS",
  "Vehicle Year": 1996,
  "Vehicle Type": "Coupe"
}

我有标题顺序随机写入的客户数据。项目的 JSON 要求高于顺序。所以我在下面写了一个代码来放置正确的顺序并转换为类型。

l = []

with open("userdata.csv", 'r') as data_file:

    reader = csv.reader(data_file)
    headers = next(reader)
    for reader_row in reader:
        d = {}
        
        d[headers[11]] = str(reader_row[11])
        d[headers[13]] = str(reader_row[13])
        d[headers[14]] = str(reader_row[14])
        d[headers[18]] = str(reader_row[18])
        d[headers[3]] = int(reader_row[3])
        d[headers[16]] = bool(reader_row[16]
        d[headers[4]] = float(reader_row[4])
        d[headers[5]] = str(reader_row[5])
        d[headers[10]] = int(reader_row[10]) if reader_row[10] else None 
        d[headers[17]] = int(reader_row[17])
        d[headers[15]] = int(reader_row[15])
        d[headers[0]]={'Address Street': str(reader_row[0]),
                       'Address City': str(reader_row[1]),
                       'Address Postcode': str(reader_row[2])
                       }
        d[headers[8]]={'Credit Card Number': str(reader_row[8]),
                       'Credit Card Start Date': str(reader_row[6]),
                       'Credit Card Expiry Date': str(reader_row[7]),
                       'Credit Card CVV': int(reader_row[9]),
                       'Bank IBAN' : str(reader_row[12])
                       }
        d[headers[19]]={'Vehicle Make': str(reader_row[19]),
                        'Vehicle Model': str(reader_row[20]),
                        'Vehicle Year': int(reader_row[21]),
                        'Vehicle Type': str(reader_row[22])
                        }
        l.append(d)
    print(d)   

但在那次转换之后,我遇到了退休布尔类型的错误。由于 csv 文件是以字符串格式编写的。所有转换后的 bool 都带有 True,因为 bool("true") 或 bool("false") 为 True,您能帮我使用默认系统库(os、sys、time)将所有退休值转换为正确的 bool 类型吗,json,csv,...)?

标签: pythondataframecsvboolean

解决方案


要将您的字符串值转换为布尔值,您应该能够按如下方式进行比较:

d[headers[16]] = reader_row[16].lower().strip() == 'true'

lower()and可能不需要,strip()但它们确保字符串是小写的,并且没有任何额外的空格来帮助比较。


推荐阅读