首页 > 解决方案 > 使用 Pandas 写入 Excel 时出现意外字符

问题描述

我有一个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 DataFrame,以便将其写入.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', ''))

但什么也没发生,角色还在。

我怎样才能解决这个问题?

标签: pythonexcelpython-3.xpandasdataframe

解决方案


您需要确保在转换为 .xlsx 文件之前将需要为数字的单元格转换为数字(通常是整数)。

在你的情况下:

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

推荐阅读