#python #pandas #dataframe #input
#питон #pandas #фрейм данных #ввод
Вопрос:
Я подумал о том, чтобы попробовать этот вопрос из-за предыдущих успешных ответов. Это будет сложно, у меня есть этот простой вывод с использованием Panda, извлеченный из файла CSV,
Timeline: 1900 - 1999 ← Did a simple print("Timeline: 1900 - 1999")
Year Month
0 1900 Jan
1 1900 Feb
2 1900 Mar
3 1900 Apr
4 1900 May
.. ... ...
1185 1999 Aug
1186 1999 Sep
1187 1999 Oct
1188 1999 Nov
1189 1999 Dec
Моя задача — создать пользовательский ввод, который выбирает начальный YY или YYMM и конечный YY или YYMM для нарезки строк, вот как я себе это представляю,
start_time = input(YY/YYMM) e.g 1910 Jan
end_time = input(YY/YYMM) e.g 1930 Nov
Note: Again, I want user to also be able to enter just the year itself rather than both year and month e.g. 1911
Итак, как указано выше, вывод должен выглядеть примерно так,
Timeline: YY/YYMM - YY/YYMM ← Changes based on start_time amp; end_time
Year Month
0 1910 Jan
1 1910 Feb
2 1910 Mar
3 1910 Apr
4 1910 May
.. ... ...
231 1930 Nov
Проблема для меня заключается в моей неопытности при работе с Panda в python и в том, что я не привык нарезать такие методы, я ценю, что кто-нибудь может мне помочь, хотя я просто экспериментирую с тем, как Panda работает с другими функциями.
Ответ №1:
Это один из способов сделать это.
import pandas as pd
# Inputs
start_time = input('Start Period: ') # 1900 Jan or 1900
end_time = input('End Period: ') # 1910 May or 1910
# If month is present
if len(start_time.split()) > 1:
start_year, start_month = start_time.split()
# no start month
else:
start_year = start_time
start_month = 'Jan'
# If end month
if len(end_time.split()) > 1:
end_year, end_month = end_time.split()
#no end month
else:
end_year = end_time
end_month = 'Dec'
months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
df = pd.DataFrame(columns=['Month', 'Year']) # output dataframe
# Iterate between start and end year
for i in range(int(start_year), int(end_year) 1):
temp_df = pd.DataFrame() #temporary dataframe
if i == int(start_year):
month_list = months[months.index(start_month):]
elif i == int(end_year):
month_list = months[:months.index(end_month) 1]
else:
month_list = months
temp_df['Month'] = month_list
temp_df['Year'] = i
df = df.append(temp_df, ignore_index=True)
Комментарии:
1. Черт возьми! Поначалу это кажется довольно сложным, но со временем становится легче понять. Спасибо, чувак!
2. Однако у меня есть вопрос: как мне убедиться, что пользователь действительно помещает в соответствующий промежуток времени?
3. @JohnNg проходит в некоторых условиях, таких как время начала < время окончания. Если это то, что вы спрашиваете