我想要的是这种显示方式,将月份覆盖到日期时间,并雇用加拿大人浮动或整数
我使用了这段代码,但我不断收到错误消息“几个月来没有定义,并没有雇用过加拿大人”
nfl2 = nfl.melt(id_vars=["Month", "Employer Persons"],
var_name="Province",
value_name="Newfoundland and Labrador")
nfl2 = nfl2.rename(columns={'Province': 'Months','Newfoundland and Labrador': 'Employed Canadians'})
nfl_final['Months'] = nfl_final['Months'].dt.strftime('%y-%m' )
nfl_final = nfl_final['Employer Persons'] = pd.Series(dtype='int')
答案 0 :(得分:0)
import pandas as pd
data = {
'Province': 'Newfound and Labrador',
'January': 204,
'February': 204,
'March': 195,
'April': 173,
'May': 179,
'June': 197,
'July': 204
}
nfl = pd.DataFrame(data, index=[0])
nfl = nfl.transpose().drop('Province').reset_index()
nfl = nfl.rename({'index': 'Months', 0: 'Employed Canadians'}, axis=1)
nfl['Employed Canadians'] = nfl['Employed Canadians'].astype(float)
nfl['Months'] = pd.to_datetime(nfl['Months'], format='%B')
nfl['Months'] = nfl['Months'].apply(lambda x: x.replace(year=2020))
这应该有效。
请注意,由于您没有为每个日期提供年份或日期,因此datetime对象默认为1970-01-01,因此我最后使用lambda函数将其更改为2020。您可以轻松设置这些日期时间的格式,使其仅显示为月份名称,但这会将数据类型更改为字符串。
答案 1 :(得分:0)
您错误地使用了melt
。我建议您查看文档/教程以了解其工作原理。
import pandas as pd
df = pd.DataFrame({"Province":["Hee"], "January":[4.12], "February":[76.23423]}).set_index("Province")
nfl2 = df.melt(value_vars=["January", "February"], var_name=["Months"], value_name="Employed")
nfl2.index = range(1,3)
nfl2['Months'] = pd.DatetimeIndex(pd.to_datetime(nfl2['Months'], format='%B')).month
nfl2
结果:
Months Employed
1 1 4.12000
2 2 76.23423
我只用两个月就创建了一个小例子。您可以根据需要扩展它。请提供一个代码,以在下次您提问题时重新生成数据框。
使用melt
时,应将月份声明为“ value_vars”(因为它们是值)。进行了索引移位,从1而不是0开始索引。
对于所需的日期时间格式,您并不是很明确,所以我只花了几个月的时间。 %B
从“一月”转换为日期格式,然后我仅提取月份