熊猫数据框 - 按字符串过滤/选择列是不是保留顺序?

Posted

技术标签:

【中文标题】熊猫数据框 - 按字符串过滤/选择列是不是保留顺序?【英文标题】:pandas dataframe - does filtering / selecting cols by String preserve order?熊猫数据框 - 按字符串过滤/选择列是否保留顺序? 【发布时间】:2020-09-15 22:15:38 【问题描述】:

我有一个用例,我说 10 个列,其中 5 个以字符串“Region”开头。我需要得到一个只包含这些列的结果数据框(以字符串'Region'开头)。不仅如此,我还需要确保订单被保留(例如,如果在原始 df 中,col 订单是 'Region 1', 'Region 2', 'Region 3' - 这应该被保留,而不是导致 'Region 3', 'Region 2', 'Region 1')。

遵循此问题的“已接受答案”会保留顺序还是有其他方法可以实现?

*** - find-column-whose-name-contains-a-specific-string

【问题讨论】:

剩下的列是什么,它们都是字母还是字母数字? 【参考方案1】:

如果您的数据框类似于:

print(df)


   Region 3  Region 2  Region 1  Custom  UnwantedCol
0         0         0         0       0            0

我们可以使用sorted 方法按数字对列进行排序:

nat_cols_sort = dict(sorted(
    col: int(col.split(" ")[1]) for col in df.filter(regex='^Region').columns.items(),
    key=lambda x: x[1],
))


print(df[nat_sort.keys()])

   Region 1  Region 2  Region 3
0         0         0         0

【讨论】:

【参考方案2】:

两步先用filter

s=df.filter(like='Region')

【讨论】:

我不确定这是作者要求的答案 @ArtyomAkselrod 这与您的回答完全相同。也许用regext='^Region' 替换like 更好地反映startswith 感谢@Quang Hoang @QuangHoang 这是对第一个未经编辑的版本的评论,这是不正确的。现在答案是正确的【参考方案3】:

是的,会的。 df.columns 是一个列表,当您遍历列表时,您会保留列表的顺序。因此,您可以使用上述链接中的答案:

region_cols = [col for col in df.columns if 'Region' in col]

df[region_cols] - 将是您需要的 df。

【讨论】:

以上是关于熊猫数据框 - 按字符串过滤/选择列是不是保留顺序?的主要内容,如果未能解决你的问题,请参考以下文章

按时间戳列过滤/选择熊猫数据帧的行

大熊猫在grouby之后按日期时间过滤

按条件过滤大熊猫

如何按字符串过滤熊猫数据框?

将熊猫数据框保存到csv时如何保留numpy数组

将熊猫数据框保存到csv时如何保留numpy数组