按照pandas(矢量化)

时间:2016-07-11 23:58:28

标签: python pandas dataframe vectorization

我有以下表格的数据:

     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) 获取布尔列表的速度非常快......但是, 由于大熊猫似乎对任何类型的多索引分配都不满意,对我来说如何操作布尔信息并不明显(除了创建12列......而且这很丑陋)。

月份dict:

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
}

1 个答案:

答案 0 :(得分:3)

使用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)

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