Предварительная обработка значений фрейма данных — readexcel удаляет апостроф в значениях во время импорта или другими способами преобразования строки в значения int после импорта

#python #pandas #dataframe

#python #pandas #фрейм данных

Вопрос:

У меня есть файл Excel с указанным ниже форматом данных для импорта в фрейм данных.

Мой текущий код позволяет мне извлекать точные строки, как показано на рисунке, в фрейм данных.

 df_gdp = pd.read_excel (open(gdp_path,'rb'), sheet_name='T2', skiprows= 5, skipfooter= 29)
  

Ниже приведены данные в Excel:
введите описание изображения здесь

Ниже приведен мой вывод фрейма данных: введите описание изображения здесь

Проблема: значения, показанные выше, импортируются как строка с апострофом в начале и конце, которые не отображаются.

Когда я попытался преобразовать значения в int, используя приведенные ниже методы, это не сработало.

 df_gdp.iloc[1:, 1] = df_gdp.iloc[1:, 0].str.replace("'", "").astype(float)

or

b1 = df_gdp.iloc[:, 54:61].values.astype(float)
  

Ошибка значения: не удалось преобразовать строку в float: ‘384,870.3’

Есть кое-что, что я, возможно, пропустил либо в своем коде, я должен был добавить что-то ранее в моем readexcel во время импорта, но я не знаю, как это сделать.

Я просмотрел аргумент dtype для readexcel, но не смог найти пример того, как объявить определенный диапазон столбцов для преобразования в int во время импорта. Пример, который я нашел, похож на приведенный ниже:

 pd.read_excel('tmp.xlsx', index_col=0, dtype={'Name': str, 'Value': float})  
  

Мои данные слишком много лет создавались в виде столбцов для объявления по отдельности, есть ли выход?

Мой желаемый вывод массива numpy после преобразования приведен ниже (не [ ‘69124.4’ ….]) :

 [  69124.4   63585.4   51331.7  174596.4  183850.7 -107672.4   49833.8
  120578.6   40884.1  106405.   126586.1   94867.2   22184.3  100575.9
  110966.1   52548.9  243641.7]
  

Ответ №1:

Вместо:

 df_gdp.iloc[1:, 1] = df_gdp.iloc[1:, 0].str.replace("'", "").astype(float)
  

Вы должны использовать:

 lst = df_gdp.iloc[0,1:].to_list()
lst = [s.replace(',', '') for s in lst]
lst = [float(i) for i in lst]
  

Теперь lst равен: [69124.4 63585.4 51331.7 174596.4 , ...]

Отлично работает для:

введите описание изображения здесь

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

1. Привет, Мейсам, я пробовал ваш код, но он не работает. файл Excel является in.xlsx и эта часть при замене («,», «»») заменяет запятую-разделитель пробелом, верно? Значение в фрейме данных по-прежнему отображается как строка ‘384,870.3’

2. Нет, программа возвращает ошибку ValueError: не удалось преобразовать строку в float: ‘Series([])’