我正在嘗試改進一些代碼,并在它完成后停止它拋出警告/錯誤(由于使用next(iter).
我實際上是在創建一個資料庫引擎,以塊的形式讀取一個大型 CSV 檔案,并將此處的資料附加到 PostgreSQL 資料庫中。
但是,一旦 while 回圈完成,就會出現錯誤。我可能會添加一些錯誤處理來抑制這種情況,但想知道是否有更有效的方法來做到這一點。
# Create database engine
engine = create_engine(# contains Postgres connection stuff)
# Read in CSV
iter = pd.read_csv("myfile.csv", iterator=True, chunksize=100000)
df = next(iter)
# Convert column to datetime
df.date_col = pd.to_datetime(df.date_col)
# Create table
df.head(0).to_sql(name = "mytable", con = engine, if_exists='replace')
# Add first chunk
df.to_sql(name="mytable", con=engine, if_exists='append')
# Add remaining CSV data to database table
while True:
df = next(iter)
df.date_col = pd.to_datetime(df.date_col)
df.to_sql(name="mytable", con=engine, if_exists='append')
uj5u.com熱心網友回復:
這里的問題是while(True)回圈的使用。理想情況下,要迭代迭代器,您可以使用for回圈。
如果您想使用while回圈,那么看看如何在 while 回圈中使用迭代器。
我會使用這樣的東西來實作你正在尋找的東西:
_iter = pd.read_csv("myfile.csv", iterator=True, chunksize=100000)
df = next(_iter)
# Convert column to datetime
df.date_col = pd.to_datetime(df.date_col)
# Create table
df.head(0).to_sql(name = "mytable", con = engine, if_exists='replace')
# Add first chunk
df.to_sql(name="mytable", con=engine, if_exists='append')
for i in _iter:
i.date_col = pd.to_datetime(i.date_col)
i.to_sql(name="mytable", con=engine, if_exists='append')
使用for回圈避免遇到StopIteration指示迭代器結束的例外。在此處閱讀有關迭代器的更多資訊。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/418791.html
標籤:
