代码之家  ›  专栏  ›  技术社区  ›  fmedv

避免在值以“=”开头时插入公式

  •  0
  • fmedv  · 技术社区  · 6 年前

    我最近开始使用Pandas库来验证和操作。CSV文件和Excel文件。

    源(.CSV文件):

    ID | Name | Size
    --------------------------
     0 |  Foo | =500.000 cells
     1 |  Bar | Baz
    

    ID | Name | Size
    ----------------
     0 |  Foo | 0     <- wrong value
     1 |  Bar | Baz
    

    当我打开生成的Excel文件时,会显示一条错误消息。不幸的是,错误消息是德语的,因此我将尽可能翻译它:“我们检测到'FILENAME.xlsx'的某些内容有问题。是否要还原内容?如果您信任此工作簿,请按'Yes'。” 按“是”时,工作簿将被打开,所有应为“=something”的值均为“0”。其他所有值都已正确分配!

    这是用于分配值的代码行。

    ws.ix[some_row_index, some_col_index] = edit_set.ix[some_other_row_index, some_other_col_index].values
    

    有没有办法绕过这个?可能通过使用另一种方法分配参数或设置参数?

    编辑: 因此,如果初始值,即我用Pandas打开的Excel文件,以“=”开头,并且我根本没有覆盖/更改该值,那么在将数据帧写入Excel时仍然会发生错误。

    因此,我认为我的代码中的更改应该发生在以下两行:

    writer = pd.ExcelWriter(path + name, engine='xlsxwriter', options={'strings_to_urls': False})
    edit_final_file.to_excel(writer, sheet_name = 'Main', index=False, encoding='utf-8')
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   sundance    6 年前

    如评论中所述,预编 ' 到以开头的单元格的开头 = :

    df["Size"] = df["Size"].apply(lambda x: "'" + str(x) if str(x)[0] == "=" else x)
    
        2
  •  0
  •   PMende    6 年前

    应该避免打电话给 apply .熊猫有内置的 str 方法。

    大概是这样的:

    mask = df['Size'].str.startswith('=')
    df.loc[mask, 'Size']  = "'" + df.loc[mask, 'Size']