【发布时间】:2018-12-20 03:51:14
【问题描述】:
我有一个包含大约 100 万个地址的列表,以及一个查找它们的纬度和经度的函数。由于某些记录格式不正确(或出于任何原因),有时该函数无法返回某些地址的纬度和经度。这将导致 for 循环中断。因此,对于每个成功检索经纬度的地址,我想将其写入输出 CSV 文件。或者,也许不是逐行编写,而是以小块大小编写也可以。为此,我在“追加”模式(mode='a')下使用df.to_csv,如下所示:
for i in range(len(df)):
place = df['ADDRESS'][i]
try:
lat, lon, res = gmaps_geoencoder(place)
except:
pass
df['Lat'][i] = lat
df['Lon'][i] = lon
df['Result'][i] = res
df.to_csv(output_csv_file,
index=False,
header=False,
mode='a', #append data to csv file
chunksize=chunksize) #size of data to append for each loop
但问题在于,它为每个追加打印整个数据帧。因此,对于n 行,它将写入整个数据帧n^2 次。如何解决这个问题?
【问题讨论】:
-
为什么不在例外情况下只分配
NaN或其他东西,然后在最后写整个DataFrame?如果您不想在 csv 中包含错误数据,您甚至可以将其子集到不为空的位置。 -
无论如何,如果您确实需要逐行编写,您可以使用
df.iloc[i:i+1].to_csv(...)仅编写您正在使用的一行。 -
只需在
try块之前声明lat、lon和res的默认值。
标签: python pandas read-write writetofile