gpt4 book ai didi

python - to_excel() read_excel() 出现 Pandas Unicode 导入导出错误

转载 作者:太空狗 更新时间:2023-10-29 21:57:58 24 4
gpt4 key购买 nike

早上好。

我将一个更大的情况浓缩为以下内容:

我有一个包含数据框的文件,其中包含一些值。

df = pd.DataFrame(
{'joe': [['dog'], ['cat'], ['fish'], ['rabbit']], 'ben': [['dog'], ['fish'], ['fish'], ['bear']]})

df:
ben joe
0 [dog] [dog]
1 [fish] [cat]
2 [fish] [fish]
3 [bear] [rabbit]

此数据框中包含的数据类型如下:

type(df.iloc[2,1]),df.iloc[2,1]
>>> (list, ['fish'])

当我使用 pd.to_excel() 将数据框保存到 excel 时:

writer1 = pd.ExcelWriter('Input Output Test.xlsx')
df.to_excel(writer1,'Sheet1')
writer1.save()

我立即将其读回同一个文件,如下所示:

dfi = pd.read_excel(open('Input Output Test.xlsx'), sheetname='Sheet1')

我再次测试数据的类型:

type(dfi.iloc[2,1]),dfi.iloc[2,1]
>>> (unicode, u"['fish']")

数据现在是 unicode 格式。这是有问题的,因为当我如下比较两个数据帧时,由于字符串格式不匹配,所有结果都是错误的:

np.where(df['joe'] == dfi['joe'],True,False)
dfi:
ben joe test
0 ['dog'] ['dog'] False
1 ['fish'] ['cat'] False
2 ['fish'] ['fish'] False
3 ['bear'] ['rabbit'] False

在导致此更改的读写过程中发生了什么,我如何更改它以在保存后保持 str 格式?

E:不幸的是,我的问题的性质决定了数据帧必须在不同的文件中保存和操作。

编辑,回应 EdChum 的评论:如果我将这些字符串存储为字符串,而不是列表:我仍然会遇到同样的错误:

df = pd.DataFrame({'joe': ['dog', 'cat', 'fish', 'rabbit'], 'ben': ['dog', 'fish', 'fish', 'bear']})

ben joe
0 dog dog
1 fish cat
2 fish fish
3 bear rabbit

writer1 = pd.ExcelWriter('Input Output Test Joe.xlsx')
df.to_excel(writer1,'Sheet1')
writer1.save()

dfi = pd.read_excel(open('Input Output Test Joe.xlsx','rb'), sheetname='Sheet1')

type(dfi.iloc[2, 1]), dfi.iloc[2, 1]
(unicode, u'fish')

再次,比较失败。

编辑:也可以通过 ast.literal_eval() 将 Unicode 评估为常规字符串,如下所述: Convert string representation of list to list in Python或者按照 EdChum 的建议。

请注意,如果您使用 to_csv()read_csv(),则不会出现此问题。

但是为什么to_excel()/re_excel()会改变原来的代码呢?

最佳答案

But why does to_excel() / re_excel() change the original code?

我不知道。我简单地查看了to_excelfrom_excel的源码,但没有找到任何线索。
设置 engine='xlsxwriter' 并将 encoding 保留为默认值似乎可以做到这一点,即:

import pandas as pd
df = pd.DataFrame(
{'joe': [['dog'], ['cat'], ['fish'], ['rabbit']], 'ben': [['dog'], ['fish'], ['fish'], ['bear']]})

with pd.ExcelWriter ('Input Output Test.xlsx') as writer:
df.to_excel(writer, sheet_name='Sheet1', engine='xlsxwriter')

dfi = pd.read_excel('Input Output Test.xlsx')

assert eval(dfi.iloc[2,1]) == df.iloc[2,1]
# True

关于python - to_excel() read_excel() 出现 Pandas Unicode 导入导出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42023119/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com