因此,我尝试打开一个csv文件,读取它的字段,并基于此修复其他一些字段,然后将数据保存回csv。我的问题是csv文件有200万行。最好的方法是什么来加快速度。
csv文件包括
ID; DATE(d/m/y); SPECIAL_ID; DAY; MONTH; YEAR
我正在计算同一日期的行在我的记录中出现的频率,然后根据该数据更新特殊的\u id。
根据我以前的研究,我决定用熊猫。我将在将来处理更大的数据集(1-2GB)-这一个大约119MB,所以我必须找到一个好的快速解决方案。
我的代码如下:
df = pd.read_csv(filename, delimiter=’;’)
df_fixed= pd.DataFrame(columns=stolpci) #when I process the row in df I append it do df_fixed
d = 31
m = 12
y = 100
s = (y,m,d)
list_dates= np.zeros(s) #3 dimensional array.
for index, row in df.iterrows():
PROCESSING LOGIC GOES HERE
IT CONSISTS OF FEW IF STATEMENTS
list_dates[row.DAY][row.MONTH][row.YEAR] += 1
row[‘special_id’] = list_dates[row.DAY][row.MONTH][row.YEAR]
df_fixed = df_fixed.append(row.to_frame().T)
df_fixed .to_csv(filename_fixed, sep=’;’, encoding=’utf-8′)
我试着每处理1000行就打印一次。起初,我的脚本1000行需要3秒,但运行时间越长,速度越慢。
在43000排,需要29秒等等…
感谢以后的帮助:)
编辑:
我正在添加有关csv和expected输出的其他信息
ID;SPECIAL_ID;sex;age;zone;key;day;month;year
2;13012016505__-;F;1;1001001;1001001_F_1;13;1;2016
3;25122013505__-;F;4;1001001;1001001_F_4;25;12;2013
4;24022012505__-;F;5;1001001;1001001_F_5;24;2;2012
5;09032012505__-;F;5;1001001;1001001_F_5;9;3;2012
6;21082011505__-;F;6;1001001;1001001_F_6;21;8;2011
7;16082011505__-;F;6;1001001;1001001_F_6;16;8;2011
8;21102011505__-;F;6;1001001;1001001_F_6;16;8;2011
我得换了
-在”特殊ID”字段中输入正确的数字。
例如,对于具有
id=2特殊的\u id将
26022018505001(
-被001替换)如果csv中的其他人在同一天、同一个月、同一年、同一天共享,那么uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
因此,上述行的expected输出将是
ID;SPECIAL_ID;sex;age;zone;key;day;month;year
2;13012016505001;F;1;1001001;1001001_F_1;13;1;2016
3;25122013505001;F;4;1001001;1001001_F_4;25;12;2013
4;24022012505001;F;5;1001001;1001001_F_5;24;2;2012
5;09032012505001;F;5;1001001;1001001_F_5;9;3;2012
6;21082011505001;F;6;1001001;1001001_F_6;21;8;2011
7;16082011505001;F;6;1001001;1001001_F_6;16;8;2011
8;21102011505002;F;6;1001001;1001001_F_6;16;8;2011
编辑:
我把代码改成这样:我用数据填充听写列表,然后将该列表转换为数据帧并另存为csv。这需要大约30分钟才能完成
list_popravljeni = []
df = pd.read_csv(filename, delimiter=’;’)
df_dates = df.groupby(by=[‘dan_roj’, ‘mesec_roj’, ‘leto_roj’]).size().reset_index()
for index, row in df_dates.iterrows():
df_candidates= df.loc[(df[‘dan_roj’] == dan_roj) & (df[‘mesec_roj’] == mesec_roj) & (df[‘leto_roj’] == leto_roj) ]
for index, row in df_candidates.iterrows():
vrstica = {}
vrstica[‘ID’] = row[‘identifikator’]
vrstica[‘SPECIAL_ID’] = row[’emso’][0:11] + str(index).zfill(2)
vrstica[‘day’] = row[‘day’]
vrstica[‘MONTH’] = row[‘MONTH’]
vrstica[‘YEAR’] = row[‘YEAR’]
list_popravljeni.append(vrstica)
pd.DataFrame(list_popravljeni, columns=list_popravljeni[0].keys())
Original: https://blog.csdn.net/weixin_28692817/article/details/112923656
Author: 孙煜征
Title: python能处理csv文件吗_python处理csv文件非常慢
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/743895/
转载文章受原作者版权保护。转载请注明原作者出处!