【问题标题】:How to select dataframe columns whose values follow a specific formatting?如何选择其值遵循特定格式的数据框列?
【发布时间】: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()

但是有两个问题:

  1. 此逻辑基于列名,问题与列无关 我提到的名称可能不同,可能没有这些 字符串作为其名称的一部分。但我想过滤那些列 其值遵循以下格式:$XXX.XX。

  2. 即使目前它在新列名的情况下也会失败,我不能 当然,将这些部分添加到列表中。另外,它总是 容易泄漏。在我看来,根据内容选择栏目 格式化是最终的解决方案。

【问题讨论】:

  • 所有列的格式总是相同的?那么可能只测试第一行吗?或者应该有不同的格式,例如在col 列中,第一个值为20.5,第二个值为$20,第三个值为10...?
  • 是的,各行的格式相同

标签: python pandas dataframe


【解决方案1】:

DataFrame.filterregex 一起使用,并通过| 连接值作为正则表达式or

possible_cols_name_parts = ['MSRP', 'Price', 'USD', '$', 'Wholesale']
df1 = df.filter(regex='|'.join(possible_cols_name_parts))

替代方案:

df1 = df.loc[:, df.columns.str.contains('|'.join(possible_cols_name_parts))]

如果需要$ 划分的所有列:

df2 = df.loc[:, df.columns.str.startswith('$')]

#^ for start of string, escaped $ because special regex char
df2 = df.filter(regex='^\$')

【讨论】:

  • 嘿@jezrael 感谢您的提示。如果我坚持当前有缺陷的逻辑,但如何选择名称中不包含这些部分但仍然具有遵循 $XXX.XX 格式的值的列,它会有所帮助。
  • @Hamza - 我编辑答案,但不确定是否了解需要。
  • 嘿@jezrael!这与我提到的列名无关,它们可能不同,并且可能不会将这些字符串作为其名称的一部分。但我想过滤那些值遵循这种格式的列:$XXX.XX。也许我不清楚。将编辑问题以合并它
  • @Hamza - 你能添加一些示例数据吗?输入和预期输出?
【解决方案2】:

我已经为此苦苦挣扎了一段时间,但找到了这个解决方案,它将使用您的正则表达式检查 第一行 并仅返回列,其中该正则表达式返回“true”:

regex='your_regex_here'

df1 = df[df.iloc[0].str.contains(regex, na=False).index[df.iloc[0].str.contains(regex, na=False)]]

【讨论】:

    猜你喜欢
    • 2018-03-13
    • 1970-01-01
    • 2021-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    • 1970-01-01
    • 2020-10-13
    相关资源
    最近更新 更多