我需要导入一个excel工作表,就像在Pandas中的数据框中一样。当使用read_excel
函数与dtype=object
时,我仍然得到"解释"的值。
我在水蟒环境中使用Python 3.5.4,Pandas0.23.4。
我的(测试)excel工作表:
header1 header2 header3 header4 header5 header6 mixed
word11 word12 word13 word14 word15 word16 word17
word21 word22 word23 word24 word25 word26 word27
TRUE 1 FALSE 0 TRUE 1 TRUE
word41 word42 word43 word44 word45 word46 0
0 TRUE 0 TRUE TRUE 0 FALSE
1 FALSE 1 FALSE FALSE 1 1
word71 word72 word73 word74 word75 word76 word77
所以我导入并打印:
sheets_dict = pd.read_excel(reqFile, sheet_name=[1],dtype=object)
sheets_dict[list(sheets_dict.keys())[0]]
导入的 Dataframe :
header1 header2 header3 header4 header5 header6 mixed
0 word11 word12 word13 word14 word15 word16 word17
1 word21 word22 word23 word24 word25 word26 word27
2 True 1 False 0 True 1 True
3 word41 word42 word43 word44 word45 word46 0
4 0 1 False True True 0 0
5 True False 1 0 False 1 True
6 word71 word72 word73 word74 word75 word76 word77
色谱柱1:
对于包含True
且后跟1
的列,1
也会作为True
加载到 Dataframe 中。
第2列:
相反的情况也会发生:如果1
首先出现在列中,随后出现True
,则True
在 Dataframe 中被加载为1
。
第3列:False
使所有后续的0
都转换为False
第4列:
对列3
第5/6列:
一切顺利
第7列:
第一个True
将所有后续的1
转换为True
,而第一个0
将所有后续的False
转换为0
。
我怎样才能强制read_excel
不解释任何东西,并按原样读取Excel工作表?如有任何帮助,我将不胜感激。
3条答案
按热度按时间093gszye1#
你可以强制Pandas将列类型设置为str,而不是以不可预知的方式自动转换为布尔型和整型。如果这样做有效,你可以插入一个条件,这样只有“TRUE”和“FALSE”被转换为布尔型,数字1和0被转换为整型。converters参数接受一个字典。
qnakjoqk2#
因此,为了强制我所需要的,我做了以下操作:
像这样,我得到了我的Excel工作表的确切副本:
唯一的缺点是我需要读两遍表格。
31moq8wy3#
我也遇到过类似的问题,我使用了Werner的解决方案,但我认为我改进了它,包括nrows=0应该可以减少两次读取数据的问题。
尝试用Pandas读字符串有一些有趣的历史,目前仍在研究中:https://github.com/pandas-dev/pandas/issues/20377
https://pandas.pydata.org/docs/user_guide/text.html
我个人觉得奇怪的是dtype=str并没有给予你所有的字符串值,为什么你必须为每一列创建一个转换器,它们表达的是完全相同的内容呢?