Excel文件在同一列中同时包含布尔值和“ 0”和/或“ 1”,但未使用read_excel正确导入

时间:2019-06-15 22:17:33

标签: python pandas

我需要像导入熊猫一样在数据框中导入Excel工作表。将read_excel函数与dtype=object一起使用时,我仍然会得到“解释的”值。

我在anaconda环境中使用的是Python 3.5.4,pandas 0.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]]

导入的数据框:

  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的形式加载到数据帧中。

第2列:
反之亦然:如果在该列中首先出现1,然后出现True,则True将作为1加载到数据帧中。

第3列:
False将所有后续0转换为False

第4列:
在column3的对面

第5/6栏:
都很好

第7列:
前一个True将所有后续1切换为True,而前一个0将所有后续False转换为0

如何强制read_excel不解释任何内容并按原样阅读Excel工作表?任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

您可以强制熊猫将列类型设置为 str ,而不是以不可预测的方式将其自动转换为布尔值和整数。如果这可行,则可以插入条件,以便仅将“ TRUE”和“ FALSE”转换为布尔值,并将数字1和0转换为int类型。 转换器参数使用字典。

'df = pd.read_excel('test.xlsx', sheetname='Sheet1', header=0,          
                    converters={'header1':str,'header2':str})'

答案 1 :(得分:0)

为了强制执行我需要的操作,我执行了以下操作:

sheets_dict = pd.read_excel(reqFile, sheet_name=[1],dtype=object)
keys = sheets_dict[list(sheets_dict.keys())[0]].keys()
values = [str] * len(keys)
convertDict = dict(zip(keys, values))
sheets_dict = pd.read_excel(reqFile, sheet_name=[1],dtype=object,converters=convertDict)

就像这样,我得到了我的Excel工作表的精确副本:

  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    True       0    True    True       0   False
5       1   False       1   False   False       1       1
6  word71  word72  word73  word74  word75  word76  word77

唯一的缺点是我需要在工作表中阅读两次。