如何快速读取5个每个超过200万行数据的表格 合并按时间字段降序 按单号去重 再分批导出
时间: 2024-12-12 20:19:43 浏览: 5
怎么把数据库表中的数据一行一行的写入文本文件,并且每个字段加上分隔符
4星 · 用户满意度95%
处理大量数据时,我们需要考虑性能和内存效率。以下是一系列步骤来实现这个需求:
1. **导入所需的库**:
首先,确保已安装 `pandas` 库,它是用于数据操作的强大工具。
```python
import pandas as pd
```
2. **逐个读取大文件**:
使用 `pd.read_csv` 或 `pd.read_excel` 读取大文件,但不是一次性全部加载到内存,而是分块读取。这可以通过 `chunksize` 参数实现,例如每块100,000行。
```python
chunk_size = 100000
# 这里假设你的文件是csv格式
dfs = []
for chunk in pd.read_csv('large_file.csv', chunksize=chunk_size):
dfs.append(chunk)
```
对于Excel文件,用 `pd.read_excel` 替换上述 `pd.read_csv`。
3. **合并和排序**:
创建一个空的数据框来保存所有数据,然后循环遍历数据块,每次添加新块后进行排序。
```python
# 假设time_field是时间列名,order_by是排序列名(如果有多个排序条件,可以使用多级索引)
merged_df = pd.concat(dfs).sort_values(by='time_field', ascending=False)
# 如果你想保留原始的唯一顺序,可以考虑使用'groupby'和'drop_duplicates'组合
unique_df = merged_df.groupby(['order_by'])['other_columns'].first().reset_index()
```
4. **分批导出**:
如果内存限制仍然存在,你可以继续分批处理。设置一个新的阈值(比如100,000行),然后写入CSV或Excel文件,每次写入一部分数据。
```python
output_dir = 'output_files'
batch_size = 100000
for i, batch in enumerate(unique_df.iterrows(), start=1):
start_idx = (i - 1) * batch_size
end_idx = min(start_idx + batch_size, unique_df.shape[0])
batch_data = unique_df.iloc[start_idx:end_idx]
output_filename = f'{output_dir}/file_{i}.csv'
batch_data.to_csv(output_filename, index=False)
```
阅读全文