Импорт csv с помощью genfromtxt () и конвертеров

#python #converters #genfromtxt

#python #конвертеры #genfromtxt

Вопрос:

 import numpy as np
import csv
filename = "a.csv"

def convert(s): 
    s = s.strip().replace(',', '.')
    return str(s)

salary_data = np.genfromtxt(filename,
                     delimiter= ',',
                     dtype=[('year','i8'),('university','U50'),('school','U250'), 
                     ('degree','U250'),('employement_rate_overall','f8'), 
                     ('basic_monthly_mean','f8'),('gross_monthly_mean','i8'), 
                     ('gross_monthly_median','i8'),('gross_mthly_25_percentile','i8'), 
                     ('gross_mthly_75_percentile','i8')], 
                     encoding= None, #avoid having the deprecated warning
                     skip_header=1,
                     missing_values=['na','-'],filling_values=[0],
                     converters={2: convert} ,
                     comments=None)
print(salary_data)
 

Я пытался загрузить данные csv, но данные довольно грязные, поскольку они содержат кавычки / запятые внутри некоторого поля значений и вызывают у меня ошибку.

       Some errors were detected!
      Line #5 (got 13 columns instead of 12) 
 

Я пытался убрать запятые с помощью конвертеров. Однако код, похоже, не работает.
и я попытался

       converters={2: lambda s: str(s.replace(',', '.'))}
 

Это также не работает для моих случаев. Я надеюсь узнать, в чем моя ошибка, и спасибо за помощь! Спасибо, что заметили мою ошибку! Даже я пытался заменить кавычки, код не работает.
Текст ниже — это файл csv, который я загружаю.

       year,university,school,degree,employment_rate_overall,employment_rate_ft_perm,basic_monthly_mean,basic_monthly_median,gross_monthly_mean,gross_monthly_median,gross_mthly_25_percentile,gross_mthly_75_percentile
     2013,Nanyang Technological University,College of Business (Nanyang Business School),Accountancy and Business,97.4,96.1,3701,3200,3727,3350,2900,4000
     2013,Nanyang Technological University,College of Business (Nanyang Business 
     School),Accountancy (3-yr direct Honours Programme),97.1,95.7,2850,2700,2938,2700,2700,2900
     2013,Nanyang Technological University,College of Business (Nanyang Business 
     School),Business (3-yr direct Honours Programme),90.9,85.7,3053,3000,3214,3000,2700,3500
     2013,Nanyang Technological University,"College of Humanities, Arts amp; Social 
     Sciences",Economics,89.9,83.5,3085,3000,3148,3000,2800,3545
     2013,Nanyang Technological University,College of Sciences,Biomedical Sciences 
     **,na,na,na,na,na,na,na,na
     2013,Nanyang Technological University,College of Sciences,Biomedical Sciences 
     (Traditional Chinese Medicine) #,90.7,88.4,2840,2800,2883,2807,2700,3000
     2013,Nanyang Technological University,College of Sciences,Mathematics amp; Economics 
     **,na,na,na,na,na,na,na,na
     2014,Nanyang Technological University,"College of Humanities, Arts amp; Social 
     Sciences","Art, Design amp; Media",80,68,2761,2600,2791,2700,2300,3000
 

Комментарии:

1. правда ли, что в вашем исходном файле .csv есть более или менее случайные разрывы строк, которые разделяют отдельные отдельные элементы на две строки? Например, похоже, что это имеет место в конце 2013,Nanyang Technological University,"College of Humanities,

2. Да, безусловно.. Есть ли способ решить это в gen из функции txt?

Ответ №1:

Я импортировал ваш файл в формате .csv, и, как указал @fischmalte, есть новые строки, например, в Nanyang Business School .

Однако это не вызывает вашу ошибку.
Фактически, ошибка Line #5 (got 13 columns instead of 12) вызвана " "College of Humanities, Arts amp; Social Sciences"

Из-за этого программа чтения csv генерирует еще один столбец.
Удалите их, и ваша ошибка исчезнет.

Кроме того, если вы используете pandas, " они будут обрабатываться автоматически:

 import pandas as pd
df = pd.DataFrame("my_file.csv")
 

(Однако он не позаботится о прерывателе строки)