我有一个excel文件,并且列Model
的一行的值为“9-3”,这是一个字符串值。我仔细检查了excel文件,使列数据类型为Plain字符串而不是Date。但是当我使用read_excel并将其转换为数据帧时,该值显示为2017-09-03 00:00:00而不是字符串“9-3”。
以下是我阅读excel文件的方法:
table = pd.read_excel('ManualProfitAdjustmentUpdates.xlsx' , header=0, converters={'Model': str})
关于为什么pandas没有将值视为字符串的任何想法,即使我将转换器设置为str?
答案 0 :(得分:2)
Excel文件中的普通字符串设置仅影响数据在Excel中的显示方式。 转换器中的str设置仅影响它处理数据的方式。
要强制excel文件将数据作为字符串返回,单元格的第一个字符应为撇号。 改变" 9-3"到"' 9-3"。
答案 1 :(得分:2)
问题可能出在excel上。确保整个列存储为文本,而不仅仅是您正在讨论的单数值。如果excel在任何时候都将该列保存为数据,则无论显示的是什么或者数据类型的更改,它都将在该单元中存储一年。 Pandas将整个列作为一种数据类型读取,因此如果日期高于9-3,它将被转换。将日期更改为没有年限的字符串可能会非常棘手。最好将excel表格保存为csv,如果它是您喜欢的正确格式,然后使用pandas pd.read_csv()。我做了一个测试excel工作簿“book1.xlsx”
9-3 1 Hello
12-1 2 World
1-8 3 Test
然后跑
import pandas as pd
df = pd.read_excel('book1.xlsx',header=0)
print(df)
并正确找回了我的数据框。因此,我被引导相信它是优秀的。对不起是不是最好的答案,但我不相信这是一个熊猫错误。