Yus*_*UMS 4 python csv duplicates dataframe pandas
我有一个包含数百万数据的数据帧.假设这是名为的数据帧mydataframe:
filename | #insert-1 | #insert-2 | #delete-1 | #delete-2
---------------------------------------------------------
A | 4 | 4 | 3 | 3
B | 3 | 5 | 2 | 2
C | 5 | 5 | 6 | 7
D | 2 | 2 | 3 | 3
E | 4 | 5 | 5 | 3
---------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
我需要根据插入或删除的不同数量来分离文件,然后将它们保存到新CSV文件中,命名为different.csv.并且还在CSV名为的单独文件中保存具有相同插入和删除数量的其余数据same.csv.在换句话说,如果该文件之间具有不同数目的#insert-1和#insert-2,或#delete-1和#delete-2然后将其保存在different.csv,否则,将其保存在same.csv.
预期结果
different.csv:
filename | #insert-1 | #insert-2 | #delete-1 | #delete-2
---------------------------------------------------------
B | 3 | 5 | 2 | 2
C | 5 | 5 | 6 | 7
E | 4 | 5 | 5 | 3
---------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
same.csv
filename | #insert-1 | #insert-2 | #delete-1 | #delete-2
---------------------------------------------------------
A | 4 | 4 | 3 | 3
D | 2 | 2 | 3 | 3
---------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
到目前为止这是我的代码:
df_different = []
df_same = []
for row in range(0, len(mydataframe)):
ins_1 = mydataframe.iloc[row][1]
ins_2 = mydataframe.iloc[row][2]
del_1 = mydataframe.iloc[row][3]
del_2 = mydataframe.iloc[row][4]
if (ins_1 != ins_2) or (del_1 != del_2):
df_different.append(mydataframe.iloc[row])
else:
df_same.append(mydataframe.iloc[row])
with open('different.csv','w') as diffcsv:
writers = csv.writer(diffcsv, delimiter=',')
writers.writerow(fields)
for item in df_different:
writers.writerow(item)
with open('same.csv','w') as diffcsv:
writers = csv.writer(diffcsv, delimiter=',')
writers.writerow(fields)
for item in df_same:
writers.writerow(item)
Run Code Online (Sandbox Code Playgroud)
实际上,代码运行良好,但是当数据集非常大(我有数百万个数据)时,执行需要很长时间(超过3个小时).我的问题是,是否有一种方法可以加快速度.谢谢.
避免迭代行; 这很慢.相反,矢量化比较操作:
same_mask = (df["#insert-1"] == df["#insert-2"]) & (df["#delete-1"] == df["#delete-2"])
df.loc[same_mask].to_csv("same.csv", index=False)
df.loc[~same_mask].to_csv("different.csv", index=False)
Run Code Online (Sandbox Code Playgroud)
对于1M行的数据帧,这只需要几秒钟.
| 归档时间: |
|
| 查看次数: |
131 次 |
| 最近记录: |