티스토리
날짜 기반 데이터 필터링 간소화
1. 코드 리뷰
import pandas as pd
# CSV 파일 또는 다른 소스에서 데이터프레임을 읽어옴 (예: read_csv)
df = pd.read_csv('your_data.csv', parse_dates=['date_column'])
# 날짜를 인덱스로 설정
df.set_index('date_column', inplace=True)
# 날짜 범위로 데이터 추출
start_date = '2023-01-01'
end_date = '2023-01-31'
filtered_df = df.loc[start_date:end_date]
위의 내용으로 최적화한 코드 아래 참조
import pandas as pd
def read_and_filter_data(file_path, date_column, start_date, end_date):
"""
CSV 파일에서 데이터를 읽고 날짜를 기반으로 필터링하여 반환합니다.
"""
try:
df = pd.read_csv(file_path, parse_dates=[date_column])
df.set_index(date_column, inplace=True)
filtered_df = df.loc[start_date:end_date]
return filtered_df
except Exception as e:
print(f"Error reading or filtering data: {e}")
return None
# 파일 경로 및 날짜 범위 설정
file_path = 'your_data.csv'
date_column = 'date_column'
start_date = '2023-01-01'
end_date = '2023-01-31'
# 데이터 읽기 및 필터링
result_df = read_and_filter_data(file_path, date_column, start_date, end_date)
# 결과 확인
if result_df is not None:
print(result_df)
이 코드는 함수로 래핑하여 재사용 가능하게 만들었고, 에러 처리를 추가하여 예외 상황에 대비했습니다. 또한 주석을 추가하여 코드를 이해하기 쉽도록 했습니다.
코드를 함수로 래핑하고 에러 처리를 추가함으로써 코드의 재사용성과 유지보수성이 향상되었습니다. 함수를 통해 데이터 읽기 및 필터링이 일관되게 이루어지며, 예외가 발생할 경우 사용자에게 알리고 적절한 조치를 취할 수 있습니다.
함수에 추가적인 인자를 전달하면 더 많은 유연성을 확보할 수 있습니다. 예를 들어, 사용자가 날짜 형식을 지정하거나 다른 필터 기준을 추가할 수 있습니다. 반환값을 다르게 처리하여 실패 시에도 특별한 값을 반환하면 사용자에게 더 많은 정보를 제공할 수 있습니다.
추가적인 예외 처리를 위해 except Exception as e를 더 구체적인 예외로 세분화하는 것이 좋습니다. 예를 들어, pd.read_csv에서 발생하는 특정 예외를 잡아서 사용자에게 더 정확한 오류 메시지를 제공할 수 있습니다.
2. 코드 리뷰#2
또다른 예제 코드로 위의 내용을 바탕으로 구현한 코드입니다.
import pandas as pd
# Sample DataFrame with date range
df = pd.DataFrame({'date': pd.date_range(start='2023-01-01', periods=10, freq='D'),
'value': range(10)})
# Filtering data between specific dates
filtered_data = df[df['date'].between('2023-01-03', '2023-01-05')]
.between() 메소드 사용: 코드 간소화를 위해 .between() 메소드를 사용했습니다. 이는 가독성을 향상시키고 코드를 더 간결하게 만듭니다.
변수 이름: result 대신 filtered_data를 사용하여 결과의 의미를 명확히 합니다.
2. 위의 예제코드 시각화
시각화 코드 :
import pandas as pd
import matplotlib.pyplot as plt
# Sample DataFrame with date range
df = pd.DataFrame({'date': pd.date_range(start='2023-01-01', periods=10, freq='D'),
'value': range(10)})
# Filtering data between specific dates
filtered_data = df[df['date'].between('2023-01-03', '2023-01-05')]
# Plotting
plt.figure(figsize=(10, 6))
plt.plot(df['date'], df['value'], label='Original Data', marker='o')
plt.plot(filtered_data['date'], filtered_data['value'], label='Filtered Data', marker='o', color='red')
plt.title('Date-based Data Filtering')
plt.xlabel('Date')
plt.ylabel('Value')
plt.xticks(rotation=90) # Rotate x-axis labels vertically
plt.legend()
plt.grid(True)
# Save the updated plot
plt.savefig('/mnt/data/date_filtering_plot_updated.png')
plt.show()
마무리
- 이번 포스팅은 판다스 데이터 프레임의 날짜형식 데이터 조건별 추출하는법 에 대해 알아봤습니다.
궁금한 사항은 댓글을 통해서 남겨 주시면 답변 드리겠습니다.
감사합니다.
'PYTHON 파이썬 > PANDAS(판다스)' 카테고리의 다른 글
[Python Pandas] 데이터 프레임에서 특정 열 삭제 및 에러 대처 하기 (0) | 2024.01.25 |
---|---|
[병합/Merge] 2개의 데이터의 특정 열의 이름과 값이 같은 행 병합 (1) | 2024.01.07 |
[병합/Merge] 열과 행이 다르고, 특정 열의 이름과 값이 같은 다른 데이터프레임 병합 (1) | 2024.01.06 |
[파이썬초보] pandas 특정 행부터 read , pd.read_csv skiprow (0) | 2023.06.20 |
df.query('column_name == @foo') 여기에서 @가 무슨 뜻이지? (0) | 2023.06.19 |