pandas 在“Timestamp”和“str”的示例之间不支持

ffvjumwh  于 2023-04-10  发布在  其他
关注(0)|答案(2)|浏览(202)

我一直在使用一个包含一些日期值的数据框。这些日期值包含年,月和日,如1965-07-19。现在我尝试按年对它们进行分类,每十年一次。这意味着1960 - 1969在新列“年份”中被标记为1960年,等等。我的问题是我得到了错误**"'〈'****在'Timestamp'和'str'“**的示例之间不支持,而我已将其转换为date_time pandas Dataframe 。
我的df示例:
| 活动| Event.Date |
| --------------|--------------|
| 0|1961年10月24日|
| 1|1972年7月19日|
| 二|1989-08-02|
| 三|2022-12-26 2022-12-26 2022-12-26|
我想要的:
| 活动| Event.Date |年份|
| --------------|--------------|--------------|
| 0|1961年10月24日|六十年代|
| 1|1972年7月19日|七十年代|
| 二|1989-08-02|八十年代|
| 三|2022-12-26 2022-12-26 2022-12-26|2010年代|
我一直在做的代码是:

#To datetime
df['Event.Date'] =  pd.to_datetime(df['Event.Date'])

cat_date = []
for dt in df["Event.Date"]:
    if dt < '1960-01-01' : cat_lft.append("1950's")
    elif dt < '1970-01-01': cat_lft.append("1960's")
    elif dt < '1980-01-01': cat_lft.append("1970's")
    elif dt < '1990-01-01': cat_lft.append("1980's")
    elif dt < '2000-01-01': cat_lft.append("1990's")
    elif dt < '2010-01-01': cat_lft.append("2000's")
    elif dt < '2023-01-01': cat_lft.append("2010's")
    else: cat_dt.append("nan")
        
# List as column (append)
df["Year"] = cat_date

有谁知道我做错了什么?

sxissh06

sxissh061#

import pandas as pd
    
data = {'Event': {0: 0, 1: 1, 2: 2, 3: 3},
        'Event.Date': {0: '1961-10-24',
                       1: '1972-07-19',
                       2: '1989-08-02',
                       3: '2022-12-26'}}
    
df = pd.DataFrame(data)
df['Event.Date'] = pd.to_datetime(df['Event.Date'])

print(df)
Event  Event.Date
0      0  1961-10-24
1      1  1972-07-19
2      2  1989-08-02
3      3  2022-12-26
df['Year'] = (df['Event.Date'].dt.year // 10 * 10).astype(str) + "'s"
print(df)
Event Event.Date    Year
0      0 1961-10-24  1960's
1      1 1972-07-19  1970's
2      2 1989-08-02  1980's
3      3 2022-12-26  2020's
kqlmhetl

kqlmhetl2#

将列转换为datetime后,将年份四舍五入到十年,并设置结果的格式:

import pandas as pd

df = pd.DataFrame({'Event.Date': ['1961-10-24', '1972-07-19', '1989-08-02', '2022-12-26']})
df['Event.Date'] =  pd.to_datetime(df['Event.Date'])
df['Year'] = (df['Event.Date'].dt.year // 10 * 10).apply(lambda x: f"{x}'s")
print(df)

输出:

Event.Date    Year
0 1961-10-24  1960's
1 1972-07-19  1970's
2 1989-08-02  1980's
3 2022-12-26  2020's

相关问题