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