更改熊猫数据框的形状

时间:2020-10-17 17:38:43

标签: python pandas dataframe jupyter-notebook

这是我的数据以jupyter显示的方式 enter image description here

我想要的是这种显示方式,将月份覆盖到日期时间,并雇用加拿大人浮动或整数
enter image description here

我使用了这段代码,但我不断收到错误消息“几个月来没有定义,并没有雇用过加拿大人”

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')

2 个答案:

答案 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从“一月”转换为日期格式,然后我仅提取月份