在熊猫中按列内容标记日期(矢量化)



>我有以下形式的数据:

     JournalInformation                      Month
Dec. American Journal of Science
Molecular Methods. Aug DOI: 10101
Science Journal Jun.
Dec. Cognitive Science weekly

目标:

     JournalInformation                      Month
Dec. American Journal of Science               12
Molecular Methods. Aug DOI: 10101               8
Science Journal Jun.                           6
Dec. Cognitive Science weekly                  12

我有数百万行,所以解决方案需要快速。

我发现df.JournalInformation.apply(set("Dec").issubset)是获取布尔值列表的非常快速的方法...然而由于 Pandas 似乎对任何类型的多索引分配都不满意,因此对我来说如何操作布尔信息并不明显(除了创建 12 列......这很丑陋)。


月字典:

months_of_year = {  "Jan" : 1
                  , "Feb" : 2
                  , "Mar" : 3
                  , "Apr" : 4
                  , "May" : 5
                  , "Jun" : 6
                  , "Jul" : 7
                  , "Aug" : 8
                  , "Sept": 9
                  , "Oct" : 10
                  , "Nov" : 11
                  , "Dec" : 12
}

使用str.extractmap

regex = r'({})'.format('|'.join(months_of_year.keys()))
df.JournalInformation.str.extract(regex, expand=False).map(months_of_year)

解释

print regex
(Feb|Aug|Jan|Dec|Sept|Oct|Mar|May|Jun|Jul|Apr|Nov)

regexextract中使用时,它将提取与月份字典中键匹配的第一个子字符串。 然后map将从字典中获取匹配的值。

最新更新