【问题标题】:Pandas read_excel with converter as 'str' reads capital TRUE as True带有转换器作为“str”的 Pandas read_excel 将大写 TRUE 读取为 True
【发布时间】:2020-02-29 03:37:03
【问题描述】:

在左下方的图像 - excel 数据,右 - 生成的 DataFrame 包含的内容。

问题:即使我将所有数据都作为字符串读取,大写的 TRUE(FALSE) 也被替换为 True(False):

converter = {col: str for col in (0,1)}    
pd.read_excel(file, sheetname='Sheet1', index_col=None, header=None, keep_default_na=False, converters=converter)

我希望 col2 包含大写值,但有 True 和 False 代替。 我做错了什么,我怎么能把 TRUE 读成 TRUE? 我想准确地读取所有值,因为它们在 excel 中表示。所以 TRUE 应该是 TRUE,NA -> NA,True -> True,剩下的都是一个未知的特殊词

【问题讨论】:

  • 尝试将true_values=['TRUE','True'] 传递给read_excel
  • 如果熊猫对其他值的解释与其实际值不同怎么办?至少我找到了NA。如何强制 pandas 在读取过程中禁用所有智能修改数据?
  • 听起来你想要所有的东西都是字符串。
  • 是的,这正是我想要的。我想将整个表格读取为带有文本的单元格
  • 传递dtype=str 有效吗?

标签: python excel pandas


【解决方案1】:

以下代码通过创建自定义转换函数并将其分配给特定列(在您的情况下只有一个,但可以扩展)来工作:

myconv = lambda x: str(x).upper()
bool_cols = [1]
converter = {col: myconv for col in bool_cols}    
pd.read_excel(file, sheetname='Sheet1', index_col=None, header=None, keep_default_na=False, converters=converter)

【讨论】:

  • 但这仍然意味着我在阅读过程中手动更改了数据。我想在不做任何修改的情况下读取确切的单元格值。如果我在同一列中有 TRUE 和 true 怎么办?这是两个不同的值
  • 准确的单元格值一个布尔值。您可以使用 Excel 的 TYPE 公式自行检查。如果要将TRUE 作为字符串存储在 Excel 中,则需要在其前面加上单引号 -> 'TRUE
  • 不,列的类型是文本。尽管 Excel 公式可以将其转换为布尔值,但我想读取单元格的确切值
猜你喜欢
  • 2021-10-13
  • 2017-12-22
  • 1970-01-01
  • 1970-01-01
  • 2016-02-16
  • 2019-07-08
  • 2019-01-14
  • 2014-03-11
  • 2017-07-23
相关资源
最近更新 更多