【问题标题】:Pandas Dataframe cutting off extra digits from excel importPandas Dataframe 从 excel 导入中截断多余的数字
【发布时间】:2017-12-11 21:54:33
【问题描述】:

我正在将 Excel 表读取到数据框中,效果很好。但是,Excel 工作表中的一列有一个 ID 号,该 ID 号被强制为 5 位前向数字。因此,excel 表不是 32,而是 00032,对于 500,它将是 00500。当我将此文件读入 pandas 时,它会将这些数字转换为其基值,因此 00500 在数据框中变为 500。但是,当我试图将使用 5 位索引值的文件名与 ID 号匹配时,这实际上会导致问题。我只会使用列表系统,但我需要 pandas 在遍历行时轻松访问多列数据。这是要点:

downloads = r'C:\Users\...'
filelist = os.listdir(downloads)
SDC = []
for file in filelist:
    if file.startswith('sdc'):
        SDC.append(file[3:8])
print SDC
if SDC == []:
    print "There are no downloaded files to grab at this time."

dir = r'C:\...'
os.chdir(dir)
for i, row in df.iterrows():
    if row['SDC ID'] in SDC:
        dir = r'C:\bleh\Temporary Folder' + row['Theme']
        if not os.path.exists(dir):
             os.makedirs(dir)

如何强制 pandas 中的原始值快速迭代并对照列表检查值?

【问题讨论】:

  • 该列包含整数,所以00500就是excel显示整数的方式
  • 我明白了,但是我需要导入来强制保留额外的数字。我没有看到在导入时强制将列输入作为字符串的方法。
  • 您正在将整数与字符串进行比较。无论格式如何,这永远不会起作用。选择一种类型并在该类型中进行比较。
  • 据我记得,转换不是在 pandas 级别,而是在 xlrd 或 openpyxl 级别。他们尽可能将字符串转换为数字,因此即使您将转换器传递给 read_excel 函数,您也无法取回字符串。我会尝试找到github中提出的问题。
  • @ayhan。我撤销我之前的评论。目前尚不清楚您是否正确,但无论哪种方式,问题都不清楚。了解实际数据框中的内容在这里非常重要。它来自哪里无关紧要,OP 甚至懒得显示数据帧是如何加载的。

标签: python pandas


【解决方案1】:

if row['SDC ID'] in SDC: 行检查字符串列表中是否存在整数。我可以看到两种简单的解决方案:

  1. 比较为字符串。将您的整数格式化为字符串,并保持测试基本不变。 if '{:05d}'.format(row['SDC ID']) in SDC: 之类的东西应该这样做。它会将您的整数格式化为填充零的五位数字。

  2. 比较为整数。您可以在找到它们时将文件名中的数字直接转换为整数,因为您似乎没有在任何地方使用它们的字符串属性。将SDC.append(file[3:8]) 行更改为SDC.append(int(file[3:8]))

鉴于所显示的信息,我更喜欢第二种选择,但不是太多,而且除了美观之外没有其他充分理由。

【讨论】:

  • 我今天早些时候尝试了第二种方法,因为我认为这是简单的答案。但是,由于某种原因,此方法仍然保留 0,因此与 if 语句直接比较会导致响应失败。我现在就试试你的第一个建议。
  • @WolVes。您需要提供您的 df 变量的小样本以及问题中列的类型。
  • 对不起,以后会这样做。感谢疯狂物理学家的帮助!
  • @WolVes。你现在可以做吗?它可能会在未来吸引更好的解决方案。我也很想知道真正的问题是什么。
猜你喜欢
  • 2021-12-22
  • 1970-01-01
  • 1970-01-01
  • 2013-02-21
  • 2019-08-08
  • 2017-11-18
  • 2021-06-04
  • 1970-01-01
  • 2015-07-26
相关资源
最近更新 更多