从某个目录读取csv文件,csv文件包含每日日期,读取最近一个月内的csv文件,并将所有csv文件内容变成一个dataframe,如果ts_code列有重名的取并集,csv文件的列名为ts_code,name,increase,limit_up_times
时间: 2025-03-12 10:12:54 浏览: 26
### 读取并合并指定时间范围内的CSV文件
为了实现这一目标,可以按照以下方法编写代码来完成任务。首先,需要导入必要的库,并设置好要操作的路径以及定义函数用于筛选最近一个月的日志文件。
```python
import os
import glob
from datetime import datetime, timedelta
import pandas as pd
def get_recent_files(directory, days=30):
today = datetime.now()
recent_date_threshold = today - timedelta(days=days)
files_with_dates = []
# 遍历目录下的所有csv文件
for file_path in glob.glob(f"{directory}/*.csv"):
try:
date_str = file_path.split('/')[-1].split('.')[0] # 假设文件名即为日期格式如20230901.csv
file_date = datetime.strptime(date_str, '%Y%m%d')
if file_date >= recent_date_threshold:
files_with_dates.append((file_date, file_path))
except ValueError:
continue
return sorted(files_with_dates)
def merge_csvs_to_dataframe(file_list, key_column='ts_code'):
dfs = []
for _, path in file_list:
df_temp = pd.read_csv(path)
dfs.append(df_temp)
combined_df = pd.concat(dfs, ignore_index=True).drop_duplicates(subset=[key_column], keep="last")
return combined_df
```
上述代码实现了两个主要功能:
- `get_recent_files` 函数会遍历给定目录中的所有 CSV 文件,并通过解析文件名称获取其对应的日期信息,从而过滤出过去三十天内的记录[^1]。
- `merge_csvs_to_dataframe` 接收由前一步骤产生的列表作为输入参数,依次加载这些文件的内容至 Pandas DataFrame 中;之后利用 `pd.concat()` 方法沿垂直方向堆叠各个数据框,并调用 `.drop_duplicates()` 来移除基于特定键(这里是 ts_code 列)存在的重复项,保留最后一次出现的数据条目[^2]。
最后,可以通过如下方式调用这两个函数以获得所需的大型 DataFrame 对象:
```python
# 设置工作目录和时间窗口长度
work_directory = '/path/to/csv/files'
time_window_days = 30
recent_file_list = get_recent_files(work_directory, time_window_days)
final_dataframe = merge_csvs_to_dataframe(recent_file_list)
print(final_dataframe.head())
```
这样就可以得到一个包含了来自不同源文件但无冗余记录的大规模表格结构化视图了。
阅读全文