Python 序列的真值不明确-将序列月份名称转换为月份编号
我的数据框中有一列,Python 序列的真值不明确-将序列月份名称转换为月份编号,python,pandas,Python,Pandas,我的数据框中有一列,df['Month'],它有月份名称:一月、二月等 我想把它们转换成月份数字:1,2,等等 在我的熊猫中,df['Month\u Num']=list(cal.Month\u abbr).index(df['Month'])抛出错误: 级数的真值是模糊的。使用a.empty、a.bool()、a.item()、a.any()或a.all() 熊猫: import pandas as pd import calendar as cal df['Day'] = 1 # conv
df['Month']
,它有月份名称:一月、二月等
我想把它们转换成月份数字:1,2,等等
在我的熊猫中,df['Month\u Num']=list(cal.Month\u abbr).index(df['Month'])
抛出错误:
级数的真值是模糊的。使用a.empty、a.bool()、a.item()、a.any()或a.all()
熊猫:
import pandas as pd
import calendar as cal
df['Day'] = 1
# convert 'January' to 1
df['Month_Num'] = list(cal.month_abbr).index(df['Month'])
df['date_tw'] = ''
# Create date_time based on format `mm/dd/yy`:
df['date_tw'] = pd.to_datetime(df[['Month_Num', 'Day', 'Year']])
result_df = df
为什么会发生这种情况?我能在上面找到的唯一数据是与比较运算符有关的,我没有使用比较运算符。尝试稍微不同的方法,使用
map
/replace
mapping = {v : k for k, v in enumerate(cal.month_abbr)}
df['Month_Num'] = df['Month'].map(mapping)
对于具有完整月份名称的列,请改用
cal.month\u name
。在我的month\u Num
列中,这将仅获取May
的5.0
,其余为null
。我假设这是因为month\u abbr
接受缩写,而我的month
col是完整的月份1月、2月等
。日历似乎不支持整整一个月?@Growler啊,你需要cal.month\u name
来代替。太好了,这很有效。还有一件事,我得到了ValueError:要组装映射,至少需要指定[year,month,day],[month]缺失当我执行df['date\tw']=pd.to\u datetime(df['month\u Num',day','year']]
-看起来熊猫期望年、月、日
,所以我尝试了,仍然得到了相同的错误。我检查了调试器,并且Month\u Num
没有空值。@Growler您可能想试试pd.to\u datetime(df[['Year','Month\u Num','Day'])
。