Python 带有 pandas 的日历(基本级别)

Python calendar with pandas (basic level)

您好,我正在尝试制定一年的时间表,我想在其中编写一个文本文件,其中包含每一天的活动信息。代码是错误的,但我需要帮助来更改它,以便我确实想要它做。

import pandas as pd
a = ['football', 'read']  # between 01-12-2020 - 30-04-2021
b = ['read', 'sleep']  # between 01-05-2021 - 31-08-2021
c = ['read', 'eat']  # between 01-09-2021 - 30-11-2021


with open("food.txt", "w") as f:
    for i in a:
        f.write(f"\n")
        s = pd.date_range(start='2020-12-1', end='2021-11-30')
        if '2020-12-1'<=s<='2021-04-30':
            f.write(f'{i},{s}')

#I'm trying to make a textfile that match up the activities with all dates.
# For example I want the text file to write:
# 2020-12-1
# football
# read 

# 2020-12-2
# football
# read 

# ...

# 2021-04-30
# read 
# sleep
#etc...
#If there are better ways of making this I would appreciate it, but the activities must be from a 
# inside list

我不确定这是不是你想要的。

但是您可以为 if 语句设置日期和结束日期。

然后 iteratere 抛出了整个日期列表。

我认为稍微修改一下这可能适合您。

import pandas as pd
a = ['football', 'read']  # between 01-12-2020 - 30-04-2021
start_a = pd.to_datetime('01-12-2020')
end_a = pd.to_datetime('30-04-2021')
b = ['read', 'sleep']  # between 01-05-2021 - 31-08-2021
start_b = pd.to_datetime('01-05-2021')
end_b = pd.to_datetime('31-08-2021')
c = ['read', 'eat']  # between 01-09-2021 - 30-11-2021
start_c = pd.to_datetime('01-09-2021')
end_c = pd.to_datetime('30-11-2021')


with open("food.txt", "w") as f:
    f.write(f"\n")
    s = pd.date_range(start='2020-12-1', end='2021-11-30')

    for date in s:
        f.write(str(date) + "\n")
        if end_a >= date >= start_a:
            for element in a:
                f.write(element + "\n")

        if end_b >= date >= start_b:
            for element in b:
                f.write(element + "\n")

        if end_c >= date >= start_c:
            for element in c:
                f.write(element + "\n")

        f.write("\n\n")

关于您关于重复项的问题: 您可以先将所有元素写入 tmp 列表并检查重复项。 然后只写入一次文件。

所以也许可以将 for 循环更改为类似的内容:

        for date in s:
            tmp = []
            f.write(str(date) + "\n")
            if end_a >= date >= start_a:
                for element in a:
                    if element not in tmp:
                        tmp.append(element)

            if end_b >= date >= start_b:
                for element in b:
                    if element not in tmp:
                        tmp.append(element)

            if end_c >= date >= start_c:
                for element in c:
                    if element not in tmp:
                        tmp.append(element)

            for element in tmp:
                f.write(element + "\n")

            f.write("\n\n")

所以这可能是最终版本。

2021-04-30是足球比赛的最后一天。

2021-08-31 是最后一天睡觉,2021-01-05 是第一天。

import pandas as pd
a = ['football', 'read']  # between 01-12-2020 - 30-04-2021
start_a = pd.to_datetime('01-12-2020').to_pydatetime()
end_a = pd.to_datetime('30-04-2021').to_pydatetime()
b = ['read', 'sleep']  # between 01-05-2021 - 31-08-2021
start_b = pd.to_datetime('01-05-2021').to_pydatetime()
end_b = pd.to_datetime('31-08-2021').to_pydatetime()
c = ['read', 'eat']  # between 01-09-2021 - 30-11-2021
start_c = pd.to_datetime('01-09-2021').to_pydatetime()
end_c = pd.to_datetime('30-11-2021').to_pydatetime()


with open("food.txt", "w") as f:
    f.write(f"\n")
    s = pd.date_range(start='2020-12-1', end='2021-11-30').to_pydatetime()

    for date in s:
        tmp = []
        f.write(str(date) + "\n")
        if date >= start_a and date <= end_a:
            for element in a:
                if element not in tmp:
                    tmp.append(element)

        if date >= start_b and date <= end_b:
            for element in b:
                if element not in tmp:
                    tmp.append(element)

        if date >= start_c and date <= end_c:
            for element in c:
                if element not in tmp:
                    tmp.append(element)

        for element in tmp:
            f.write(element + "\n")

        f.write("\n\n")

不同的输出文件:

import pandas as pd
import datetime
import calendar
# (month,day,year)
a = ['football', 'read']  # between 01-12-2020 - 30-04-2021
start_a = pd.to_datetime('12-01-2020').to_pydatetime()
end_a = pd.to_datetime('04-30-2021').to_pydatetime()
b = ['read', 'sleep']  # between 01-05-2021 - 31-08-2021
start_b = pd.to_datetime('05-01-2021').to_pydatetime()
end_b = pd.to_datetime('08-31-2021').to_pydatetime()
c = ['read', 'eat']  # between 01-09-2021 - 30-11-2021
start_c = pd.to_datetime('09-01-2021').to_pydatetime()
end_c = pd.to_datetime('11-30-2021').to_pydatetime()

s = pd.date_range(start='2020-12-1', end='2021-11-30').to_pydatetime()


def findDay(date):
    born = datetime.datetime.strptime(date, '%Y %m %d').weekday()
    return (calendar.day_name[born])


for date in s:
    file_name = str(date).replace(" 00:00:00", "") + ".txt"
    with open(file_name, "w") as f:
        f.write(str(date).replace(" 00:00:00", "") + " " +
                findDay(str(date).replace(" 00:00:00", "").replace("-", " ")) + "\n")
        tmp = []
        if date >= start_a and date <= end_a:
            for element in a:
                if element not in tmp:
                    tmp.append(element)

        if date >= start_b and date <= end_b:
            for element in b:
                if element not in tmp:
                    tmp.append(element)

        if date >= start_c and date <= end_c:
            for element in c:
                if element not in tmp:
                    tmp.append(element)

        for element in tmp:
            f.write(element + "\n")