首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找带有月份字符串的列名列表。

查找带有月份字符串的列名列表。
EN

Stack Overflow用户
提问于 2022-03-17 02:47:54
回答 1查看 58关注 0票数 0

我有一个列名的dataframe,如下所示

代码语言:javascript
复制
import pandas as pd 
​
data = [['30-06-2021', 3.4, 43578, '31-01-2022', 5000, '28-02-2022', 78564, '31-03-2022', 52353, '30-04-2022'], 
        ['14-06-2021', 8.9, 4475, '14-01-2022', 2546, '05-02-2022', 5757, '28-03-2022', 2352, '01-04-2022']]
ds = pd.DataFrame(data, columns = ['Start', 'Rate', 'Jan-22Total', 'Jan-22', 'Feb-22Total', 'Feb-22', 'Mar-22Total', 'Mar-22',
                                   'Apr-22Total', 'Apr-22'])

    Start       Rate Jan-22Total  Jan-22   Feb-22Total  Feb-22  Mar-22Total Mar-22   Apr-22Total  Apr-2
0   30-06-2021  3.4    43578    31-01-2022   5000     28-02-2022  78564   31-03-2022    52353   30-04-2022
1   14-06-2021  8.9    4475     14-01-2022   2546     05-02-2022   5757   28-03-2022    2352    01-04-2022

我想找到一个包含特定字符串的列表,比如Jan-22TotalJan-22Feb-22TotalFeb-22Mar-22TotalMar-22等等。基本上是%b-%y格式。

我试过几个密码,但还是没有线索。名单还没出来。

这是我迄今为止尝试过的,但是结果只显示了[]

代码语言:javascript
复制
total_col = [col for col in ds.columns if '%b-%y' in col]
print(list(ds.columns))
print(total_col)

我该如何列出列名?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-17 03:00:48

简单方法

如果您不需要确保有效日期,则可以使用简短的正则表达式,这是一种粗糙但可能足够的方法:

代码语言:javascript
复制
m = ds.columns.str.match(r'\w+-\d+')
cols = ds.columns[m]

输出:['Jan-22Total', 'Jan-22', 'Feb-22Total', 'Feb-22', 'Mar-22Total', 'Mar-22', 'Apr-22Total', 'Apr-22']

r'[A-Z][a-z]{2}-\d+' (3个字母大写的月份缩写)是一个稍具判断力的正则表达式。

鲁棒方法

一个更健壮的方法是使用pandas.to_datetime验证日期。

代码语言:javascript
复制
m = (pd.to_datetime(ds.columns.str.extract(r'^(\w+-\d+)',
                    expand=False), format='%b-%y', errors='coerce')
        .notna()
     )
cols = ds.columns[m]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71506512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档