如何解决在 Pandas 中,从 csv 块中读取和修改数据并通过附加到 csv 文件来写入非常慢
我对 Python 和 Pandas 非常陌生,真的需要帮助来加速我的代码。
我试图将从 input.csv 文件中读取的某个 X、Y 坐标映射到另一个 mapper.csv 文件中的边界框列表,并仅输出 input.csv 和 mapper.csv 中 X、 input.csv 中的 Y 完全包含在 mapper.csv 的边界框中(介于最小值和最大值之间)。
我尝试使用嵌套 for 循环遍历 input.csv 和 mapper.csv 文件。
我使用另一个第三个 for 循环从 input.csv 中分块读取数据,因为 input.csv 中的行数约为 1M。
代码很慢。执行 50 行需要超过一分钟的时间,即使我在每次迭代后都会清理列表。
我什至没有费心尝试整个 1M。我怎样才能加快速度?请帮忙!
这是我使用的:
#Read an input csv and a mapper csv files
req_cols = ['Pointer','X','Y']
file = 'input.csv'
chunksize = 10000
B = pd.read_csv('mapper.csv',header=0)
map = []
result = []
outfile = 'output.csv'
for chunk in pd.read_csv(file,chunksize=chunksize,usecols=req_cols):
map = []
result = []
for index,row in chunk.iterrows():
for mapindex,maprow in B.iterrows():
if float(row["X"]) > maprow["Min_X"] and float(row["Y"]) > maprow["Min_Y"] and float(row["X"]) < maprow["Max_X"] and float(row["Y"]) < maprow["Max_Y"]:
map.append(maprow)
result.append(row)
break
df_final_chunk = pd.concat([pd.DataFrame(result).reset_index(drop=True),pd.DataFrame(map).reset_index(drop=True)],axis=1).reset_index(drop=True)
df_final_chunk.to_csv(outfile,mode='a',header = False)
input.csv=Pointer,X,Y
Jh,23.4,25.7
Ma,17.3,18.1
Ke,27.1,29.4
He,36.2,38.9
Fe,29.4,29.8
Tn,38.1,39.5
mapper.csv=Mapper,Min_X,Min_Y,Max_X,Max_Y
M1,22.4,22.7,40.2,45.6
M2,17.8,18.9,29.8
M3,39.5
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。