#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")
(Однако он не позаботится о прерывателе строки)