#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 должно решить эту проблему.