【发布时间】:2020-08-06 21:43:25
【问题描述】:
我有一个大于1 GB 的csv 文件。通常这就是我使用pandas 将csv 转换为table 的方式。
import pandas as pd
from sqlalchemy import create_engine
file_path = "/path/to/test.csv"
df = pd.read_csv(file_path)
for col in df.columns:
# convert each column values to numeric
df[col] = pd.to_numeric(df[col], errors='coerce')
engine = create_engine('postgresql://username:password@localhost:port/dbname')
df.to_sql("mytable", engine)
如您所见,我加载了csv 文件,对每个column 执行操作并将其转储到table。
现在由于我的文件非常大,pandas 无法在data frame 中加载它。所以我在网上查找了一个解决方案,它谈到了以块的形式加载data 并执行操作Using pandas to efficiently read in a large CSV file without crashing。所以这就是我想出的
file_path = "/path/to/test.csv"
chunksize = 100000
for chunk in pd.read_csv(file_path, chunksize=chunksize, iterator=True, low_memory=False):
columns = chunk.columns
它给了我每个块的columns。那么块大小是否意味着它一次读取n 行?我不太清楚如何确保覆盖所有块并继续将data 附加到table,这样最后,我将所有data 转储到table 就像我一样csv 文件更小?
【问题讨论】:
标签: python pandas postgresql csv