【发布时间】:2021-02-09 16:15:09
【问题描述】:
为什么会这样?
因此,我将销售数据分布在多个 (.xlsx) 文件中,并且我正在开发一个可以从所有文件中提取定价信息的解析器。问题是文件既没有相同的列名称(例如价格、美元价格、美元价格、批发价格、MSRP 可能是引用同一列的少数列名称之一),列的顺序也无法预测。 (所以是的,loc() 和 iloc() 不在讨论范围内哈!)我想提取产品信息,例如UPC 和价格。 UPC 被格式化为标称 UPC 编号,所以我知道它是否出现像这样的长整数,它是我想要的列。其次价格;它们的格式为 $XXX.XX sp 我知道它们出现在哪一列,这些是我想解析为定价的列。
问题是什么?
所以我的问题是如何根据其内容的格式来选择列。例如。在不知道它们的名称或数据帧中的相对位置的情况下,所有具有 $XXX.XX 格式的值的列?
我尝试了什么?
possible_cols_name_parts = ['MSRP', 'Price', 'USD', '$', 'Wholesale']
for col in df.columns():
if any([col.__contains__(part) for part in possible_cols_name_parts]):
do_usd_stuff()
但是有两个问题:
-
此逻辑基于列名,问题与列无关 我提到的名称可能不同,可能没有这些 字符串作为其名称的一部分。但我想过滤那些列 其值遵循以下格式:$XXX.XX。
-
即使目前它在新列名的情况下也会失败,我不能 当然,将这些部分添加到列表中。另外,它总是 容易泄漏。在我看来,根据内容选择栏目 格式化是最终的解决方案。
【问题讨论】:
-
所有列的格式总是相同的?那么可能只测试第一行吗?或者应该有不同的格式,例如在
col列中,第一个值为20.5,第二个值为$20,第三个值为10...? -
是的,各行的格式相同