>我有以下形式的数据:
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.extract
和map
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
将从字典中获取匹配的值。