如何将 object 转换为日期时间中的周数

How do I convert an object to a week number in datetime

我是 Python 的初学者,我正在尝试将当前代表周数的列名称更改为更容易理解的名称。我想更改它们以显示一周的开始日期,但我在转换类型时遇到问题。

我有一个 table 看起来类似于以下内容:

import pandas as pd

data = [[0,'John',1,2,3]

df = pd.dataframe(data, columns = ['Index','Owner','32.0','33.0','34.0']

print(df)

我尝试使用 df.melt 获取包含周数的列,然后将它们转换为日期时间并获取从那开始的周,但我没有成功。

df = df.melt(id_vars=['Owner'])
df['variable'] = pd.to_datetime(df['variable'], format = %U)

这是我所能得到的,因为我无法获得周数作为日期时间类型,然后用它来开始一周。

在此之后,我打算将数据框转换回其原始形状,并将新获得的周开始日期时间再次作为列 headers。

谁能告诉我我做错了什么,或者有更好的方法吗?

如有任何帮助,我们将不胜感激!

将周数转换为日期的一种解决方案是使用 timedelta。例如你可能有

from datetime import timedelta, datetime

week_number = 5
first_monday_of_the_year = datetime(2021, 1, 3)
week_date = first_monday_of_the_year + timedelta(weeks=week_number)

首先将 Index 列添加到 melt,仅用于 variable 中的 week 值,然后转换为浮点数、整数和字符串,因此可能按周匹配:

data = [[0,'John',1,2,3]]

df = pd.DataFrame(data, columns = ['Index','Owner','32.0','33.0','34.0'])

print(df)
   Index Owner  32.0  33.0  34.0
0      0  John     1     2     3

df = df.melt(id_vars=['Index','Owner'])

s = df['variable'].astype(float).astype(int).astype(str) + '-0-2021'
print (s)
0    32-0-2021
1    33-0-2021
2    34-0-2021
Name: variable, dtype: object

#
df['variable'] = pd.to_datetime(s, format = '%W-%w-%Y')

print (df)
   Index Owner   variable  value
0      0  John 2021-08-15      1
1      0  John 2021-08-22      2
2      0  John 2021-08-29      3

编辑:

要获取原始 DataFrame(数周的整数列),请使用 DataFrame.pivot:

df1 = (df.pivot(index=['Index','Owner'], columns='variable', values='value')
         .rename_axis(None, axis=1))
df1.columns = df1.columns.strftime('%W')
df1 = df1.reset_index()
print (df1)
   Index Owner  32  33  34
0      0  John   1   2   3