Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将xlsx文件解析为字典_Python_Excel_Pandas_Parsing_Dictionary - Fatal编程技术网

Python 将xlsx文件解析为字典

Python 将xlsx文件解析为字典,python,excel,pandas,parsing,dictionary,Python,Excel,Pandas,Parsing,Dictionary,我试图解析一个非常简单的xlsx文件。它有以下格式的4张图纸:。我用熊猫来做这个 以下是我想做的: xls = pandas.ExcelFile('file.xlsx') for sheet in xls.sheet_names: cur_sheet=xls.parse(sheet) cur_sheet=set_index(sheet) dic = cur_sheet.to_dict('index') 问题: 所有内容都使用unicode,因此都有一个“u”前缀,与字典

我试图解析一个非常简单的
xlsx
文件。它有以下格式的4张图纸:。我用熊猫来做这个

以下是我想做的:

xls = pandas.ExcelFile('file.xlsx')
for sheet in xls.sheet_names:
    cur_sheet=xls.parse(sheet)
    cur_sheet=set_index(sheet)
    dic = cur_sheet.to_dict('index')
问题:

  • 所有内容都使用unicode,因此都有一个“u”前缀,与字典中的其他字符串和设置值进行比较时会出现问题。我就是无法摆脱它
  • 我希望字典只接受非Nan值
  • 有没有一种很好的方法可以不用计数器而使用“sheet”作为工作表的名称?i、 e:

    counter=0
    for sheets in xls.sheet_names
         cur_sheet=xls.parse(xls.sheet_names[counter])
    
  • 我觉得这真的很难看

  • 理想情况下,我只想要一本字典(第一列对于所有工作表都是相同的)
  • 我对Python非常陌生,它对我来说非常不直观。我整天都在网上搜索,找不到正常的解决办法

    谢谢

    让我们一个接一个地走吧。 我重新创建了您的.xlsx文件,如图所示,并对如何将文件读入dataframe进行了更改。 1.您可以通过以下方式使用:

    import pandas as pd
    pd.set_option('expand_frame_repr', False)
    dataframe = pd.read_excel('file.xlsx', sheetname = name, header = 0, index_col = 0) 
    dataframe.applymap(lambda x: x.strip('u'))
    
    它应用了在数据帧的每个单元中获取“u”RID的函数

    二,。删除NaN值

    3.这就是你如何以蟒蛇的方式循环

    xls = pd.ExcelFile('file.xlsx')
    sheets = xls.sheet_names
    
    for sheet in sheets:
         #your code
    
    让我们把它们结合起来:

    import pandas as pd
    xls = pd.ExcelFile('file.xlsx')
    sheets = xls.sheet_names
    for sheet in sheets:
        dataframe = pd.read_excel('file.xlsx', sheetname = sheet)
        dataframe = dataframe.dropna()
        dataframe.applymap(lambda x: x.strip('u'))
    
    4.我真的不明白这个问题,所以我没办法

    根据评论中的对话

    import pandas as pd
    df = pd.read_excel('file.xlsx', sheetname = name, header = 0, index_col = 0)
    cols = df.columns
    the_list = list()
    for col in cols:
        print(df[~df[col].isnull()].index.tolist())
        column = (col, df[~df[col].isnull()].index.tolist())
        the_list.append(column)
    

    此代码打开您的文件,然后在列中循环,并为包含列id和行id列表的每列创建一个元组。因此,如果在第2\u 3列和第3\u 0行中有x,则元组将如下所示:
    ('2\u 3',['3\u 0'])
    。这就是你真正想做的吗?

    ps.我希望左边的一栏是字典的“关键”(所有工作表都共享)。实际上,你的问题应该一次只关注一件事。第(3)点与您的问题没有真正的联系,是我唯一有信心回答并回避的问题。去掉
    计数器
    ,直接使用
    工作表
    ,尽管我建议将其重命名为
    工作表
    ,因为它是单数的,有助于理解。所以,
    对于xls.sheet\u name中的sheet:cur\u sheet=xls.parse(sheet)
    。注意,我会这样做。关于反问题。您的建议(以及我的第一个猜测)适用于xls.parse,但不适用于cur_sheet.set_index(sheet)。部分原因是(我猜)工作表被解读为u'Bla,而不仅仅是“Bla”,所以它找不到它1没有帮助,我得到了这样的信息:AttributeError:(“'float'对象没有属性'strip',u'出现在索引3_11')你说你到处都有'u',所以我假设你到处都有字符串,错误意味着那里也有浮动。因此,请澄清这些“u”的确切位置。我附上了我的桌子的图片。“查找表”在我的第一条消息中。”u是unicode格式的,请给我5分钟,我将生成与您完全相同的文件并修复代码。@NoaRegev请尝试以下操作。第1行:
    a='hello'
    。第2行:
    b=u'hello'
    。第3行:
    打印a==b
    。这是真的。