Неожиданный символ при записи в Excel с использованием Pandas

#python #excel #python-3.x #pandas #dataframe

#python #excel #python-3.x #pandas #фрейм данных

Вопрос:

У меня есть dictionary такой:

 film = {
    'ID': [],
    'Name': [],
    'Run Time': [],
    'Genre': [],
    'link': [],
    'name 2': []
}
  

Затем я заполняю его в цикле for, вот так:

 film['ID'].append(film_id)
film['Name'].append(film_name)
film['Run Time'].append(film_runtime)
film['Genre'].append(film_genre)
film['link'].append(film_link)
film['name 2'].append(film_name2)
  

Затем я конвертирую словарь в фрейм данных Pandas, чтобы я мог записать его в .xlsx файл. Теперь, прежде чем я действительно напишу его, я распечатаю его, чтобы проверить значения Run Time столбца. И все в порядке:

 output_df = pd.DataFrame(film).set_index('ID')
print(output_df['Run Time'])

output:
ID
102    131
103     60
104       
105       
Name: Run Time, dtype: object
  

Но затем, когда я пишу это, вот так:

 writer = ExcelWriter('output.xlsx')
output_df.to_excel(writer, 'فیلم')
writer.save()
  

Файл выглядит следующим образом:

странный вывод

Как вы можете видеть, в файле есть дополнительный ' символ (одинарная кавычка). Этот символ не виден. Но я могу выделить его:

выделено

И если я удалю его, число изменится RTL :

Удалено

Итак, я думал, что невидимый символ был LTR MARK ( u200E ). Я удалил его следующим образом:

 film['Run Time'].append(film_runtime.replace('u200E', ''))
  

Но ничего не произошло, и символ все еще там.

Как я могу это исправить?

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

1. Не уверен, можете ли вы попробовать использовать 'RunTime': [], вместо 'Run Time': [], , а затем изменить film['Run Time'].append(film_runtime) на film['RunTime'].append(film_runtime) .

2. @AviThour Я изменил оба Run Time s на RunTime , но символ все еще там.

3. Является ли переменная ‘film_runtime’ строкой или числом?

4. @quamrana Это был результат совпадения регулярных выражений runtime_match.group(1) . Я преобразовал его в int , и проблема решена! Спасибо. Можете ли вы сформулировать ответ, чтобы я мог его принять?

Ответ №1:

Вам нужно убедиться, что ячейки, которые должны быть числами, преобразованы в числа (обычно целые числа) перед преобразованием в файл .xlsx.

В вашем случае просто:

 film['Run Time'].append(int(film_runtime))
  

Ответ №2:

‘ перед значением в Excel приводит к преобразованию значения в строку. Похоже, что программа Excel Writer интерпретирует такой список как массив строк. Изменение типа в DataFrame должно решить эту проблему.