python:添加和删除行 - 在另一个 CSV 中指定的操作上



我正在尝试从另一个 CSV 文件(第一个.csv(更新一个 CSV 文件(原始.csv(,我需要添加或删除在 First.csv 列-0 中指定的基于行的操作,即添加、删除。

import csv
file = 'first.csv'
with open(file) as csv_file:
csv_reader = csv.reader(csv_file, delimiter=',')
for row in csv_reader:
if row[0] == 'add':
with open('original.csv', 'a', newline='') as f:
writer = csv.writer(f, quotechar="'")
writer.writerow(row)

cat first.csv

add,apple,1,2,3
add,orange,1,2,3
delete,banana,1,2,3

cat original.csv

none,cherry,1,2,3
none,pineapple,1,2,3
none,banana,1,2,3

if column0 in first.csv is add, it will add that row in original file,
if column0 in first.csv is delete, it will delete that corresponding row (based on match of fields after `none`. delete,banana,1,2,3 == none,banana,1,2,3 both rows are same ignoring first field)

上述方法的输出获取add..

none,cherry,1,2,3
none,pineapple,1,2,3
none,banana,1,2,3
add,apple,1,2,3
add,orange,1,2,3

请帮助如何开发上述脚本,以便从原始文件中删除与删除对应的行。

expected output:

none,cherry,1,2,3 # already exist in this file
none,pineapple,1,2,3 # already exist in this file
add,apple,1,2,3 # added from first.csv file
add,orange,1,2,3 #added from first.csv file.

请帮忙。

提前谢谢。

我试图重现您的任务,您可以考虑将数据帧作为csv文件,即第一个.csv df1和原始.csv是df2

import pandas as pd
data1 = [['add','apple',1,2,3],
['add','orange',1,2,3],
['delete','banana',1,2,3]]
data2 = [['none','cherry',1,2,3],
['none','pineapple',1,2,3],
['none','banana',1,2,3]]
df1 = pd.DataFrame(data1, columns= ['column1', 'column2', 'column3', 'column4', 'column5'])
df2 = pd.DataFrame(data2, columns= ['column1', 'column2', 'column3', 'column4', 'column5'] )

**DF1 为第一.csv **

column1 column2 column3 column4 column5
0   none    cherry         1    2   3
1   none    pineapple      1    2   3
2   none    banana         1    2   3

DF2 为原版.csv

column1 column2 column3 column4 column5
0   none    cherry         1    2   3
1   none    pineapple      1    2   3
2   none    banana         1    2   3
for i, val in enumerate(df1.column1):
if val == 'add':
df2 = df2.append(df1.iloc[i,:])
if val == 'delete':
for ind, val2 in enumerate(df2.column2):
if val2 ==  'banana':
df2.drop(ind, axis = 'rows', inplace= True)

最后 df2 为原始.csv看起来像

column1 column2 column3 column4 column5
0   none    cherry     1    2   3
1   none    pineapple  1    2   3
0   add     apple      1    2   3
1   add     orange     1    2   3

注意:使用df2.reset_index()进行正确的索引,之后您可以使用 df2 作为最终数据帧以使其成为 csv 文件。

请让我知道我这是否适合您,谢谢

从原始文件中删除行的最佳解决方案是创建一个新文件,然后添加原始文件中除要删除的行之外的行。 您可以在此处看到如何完成。

最新更新