用python删除所有csv文件两列重复的一行数据

2 2 1
2 5 0.628264
2 2011 0.628264
5 5 1
5 2011 1
5 2 0.596386
6 6 1
6 3281 1
6 82 0.860465
6 8454 0.69697

需要把所有csv文件相同两列的一行数据删去,结果如下:

2 5 0.628264
2 2011 0.628264
5 2011 1
5 2 0.596386
6 3281 1
06 82 0.860465
6 8454 0.69697
结果保存为csv文件

看结果

img


代码

import pandas as pd
frame = pd.read_csv('data.csv', header=None) # 读取csv文件
data = frame[frame[0] != frame[1]] # 保留第一列和第二列不相同的行数据
data.to_csv('data.csv', header=None, index=False) # 保存csv文件
print(data) # 打印出删除后的数据

以下是一个示例代码,它可以删除所有csv文件中两列重复的行数据:

import os
import csv

def remove_duplicate_rows(directory):
    # 获取目录下的所有csv文件
    files = [file for file in os.listdir(directory) if file.endswith('.csv')]

    for file in files:
        file_path = os.path.join(directory, file)
        with open(file_path, 'r') as csv_file:
            reader = csv.reader(csv_file)
            rows = list(reader)

        # 判断是否有足够的列
        if len(rows[0]) >= 2:
            # 将第一行添加到结果列表
            result = [rows[0]]

            # 遍历剩余的行
            for row in rows[1:]:
                # 获取当前行的前两列
                current_cols = row[:2]
                # 判断当前行的前两列是否与结果列表中的某一行的前两列相同
                if any(current_cols == result_row[:2] for result_row in result):
                    continue  # 如果相同,则跳过当前行
                result.append(row)  # 如果不相同,则将当前行添加到结果列表

        # 将结果写入新的csv文件
        with open(file_path, 'w', newline='') as csv_file:
            writer = csv.writer(csv_file)
            writer.writerows(result)

# 调用函数删除所有csv文件中两列重复的行数据
remove_duplicate_rows('/path/to/csv_files_directory')

请注意,上述代码假设每个csv文件的第一行是标题行,并且每个文件至少有两列数据。如果这些条件不满足,请根据实际情况进行适当的修改。另外,将/path/to/csv_files_directory替换为包含要处理的csv文件的实际目录路径。

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/718685
  • 以下回答由chatgpt基于相关博客总结生成:

    问题分析

    问题要求我们使用Python编写代码,删除CSV文件中具有重复两列数据的行,并将结果保存为一个新的CSV文件。具体来说,如果某一行的前两列数据在其他行中已经存在,则删除这一行。

    我们可以通过以下步骤来解决问题: 1. 读取CSV文件并将其转换为DataFrame。 2. 识别并删除重复的行。 3. 将结果保存为新的CSV文件。

    解决方案

    首先,我们需要使用pandas库来处理CSV文件。以下是具体的解决方案:

    1. 导入相关库:
    import pandas as pd
    
    1. 读取CSV文件并将其转换为DataFrame:
    data = pd.read_csv('input.csv', sep='\t', header=None)  # 以制表符为分隔符读取CSV文件
    df = pd.DataFrame(data)
    
    1. 删除重复的行:
    df.drop_duplicates(subset=[0, 1], keep=False, inplace=True)
    
    1. 将结果保存为新的CSV文件:
    df.to_csv('output.csv', sep='\t', header=None, index=False)
    

    完整代码如下:

    import pandas as pd
    
    data = pd.read_csv('input.csv', sep='\t', header=None)
    df = pd.DataFrame(data)
    df.drop_duplicates(subset=[0, 1], keep=False, inplace=True)
    df.to_csv('output.csv', sep='\t', header=None, index=False)
    

    你可以将输入文件名和输出文件名替换为你自己的文件名。

    这样,重复的行将被删除,并且非重复行将被保存为新的CSV文件。

    注意事项

    1. 在读取CSV文件时,需要指定正确的分隔符。根据你的具体情况,可以将sep='\t'更改为相应的分隔符。

    2. 在删除重复行时,需要指定重复的列。根据你的需求,可以将subset=[0, 1]更改为包含你希望进行重复检查的列的列表。

    3. 输出文件将使用与输入文件相同的分隔符,并且没有列名(header=None)。如果你想要包含列名,可以删除header=None

    希望这个解决方案对你有帮助!如果你有任何问题,请随时提问。

你的问题应该是用python删除所有csv文件两列数值重复的其中一行数据,两者留下一列即可
因此我引用了chatGPT写了一下案例代码你看看,运行有问题请联系本人


import pandas as pd
import os

# 指定CSV文件所在的文件夹路径
csv_folder = 'path/to/csv/folder'

# 获取文件夹中所有的CSV文件
csv_files = [f for f in os.listdir(csv_folder) if f.endswith('.csv')]

# 对每个CSV文件进行处理
for csv_file in csv_files:
    csv_path = os.path.join(csv_folder, csv_file)
    df = pd.read_csv(csv_path)
    
    # 判断是否有两列数值重复的行
    duplicate_rows = df.duplicated(subset=['Column1', 'Column2'], keep=False)
    
    if duplicate_rows.any():
        # 删除重复行并保留一列
        df.drop_duplicates(subset=['Column1', 'Column2'], keep='first', inplace=True)
        
        # 保存修改后的CSV文件
        df.to_csv(csv_path, index=False)
import csv
from collections import defaultdict

def remove_duplicate_rows(file_path):
    # 使用defaultdict存储每个列1和列2的值对应的行的索引
    rows_dict = defaultdict(list)

    # 打开CSV文件并读取数据
    with open(file_path, 'r', newline='') as file:
        reader = csv.reader(file)
        next(reader)  # 跳过标题行
        for i, row in enumerate(reader):
            key = (row[0], row[1])
            rows_dict[key].append(i + 2)  # 添加到对应列1和列2值的行索引列表

    # 需要删除的行的索引
    rows_to_remove = [indexes[1:] for indexes in rows_dict.values() if len(indexes) > 1]

    # 将需要删除的行标记为True
    delete_row = [False] * sum(len(indexes) - 1 for indexes in rows_to_remove)
    for indexes in rows_to_remove:
        for index in indexes[:-1]:
            delete_row[index - 2] = True
   
    # 写入到新的CSV文件
    with open(file_path, 'r', newline='') as file:
        reader = csv.reader(file)
        rows = [row for i, row in enumerate(reader) if not delete_row[i]]

    with open('result.csv', 'w', newline='') as file:
        writer = csv.writer(file)
        writer.writerows(rows)

# 调用函数并传入csv文件路径
remove_duplicate_rows('替换为您实际的CSV文件路径.csv')

问题点: 读取CSV文件,过滤第一列和第二列相同的数据,并另外保存最终结果为csv文件.
代码如下:


import pandas as pd

# 读取csv文件  不默认第一行为行索引
df = pd.read_csv('data.csv', header=None)
print(df)
# 判断 第一列和第二列不相同的行数据
new_df = df[df[0] != df[1]]
# 保存数据为CSV文件 new data.csv,不需要行列索引信息
new_df.to_csv('new data.csv', header=None, index=False)  # 保存数据为CSV文件 new data.csv,不需要行列索引信息
print(new_df)  # 打印出删除后的数据

Python 去重csv文件中相同的重复行
非常详细,两种方法,可以参考下

import csv
import itertools
import operator

filename = 'testing.csv'
outfile = 'outfile.csv'
ndups = 0

with open(filename, 'r') as fin, open(outfile, 'w') as fout:
    reader = csv.DictReader(fin)
    writer = csv.DictWriter(fout, lineterminator='\n', fieldnames=reader.fieldnames)
    for id_, grp in itertools.groupby(reader, key=operator.itemgetter('ID')):
        rows = list(grp)
        if len({row['Name'] for row in rows}) > 1:
            ndups += len(rows)
            continue
        writer.writerows(rows)

print('{} duplicates.'.format(ndups))

python删除csv中重复的行代码如下:


import csv  
  
# 定义一个函数,用于检查两列数据是否相同  
def check_duplicate(row):  
    return row[0] == row[1]  
  
# 遍历所有的CSV文件  
for csv_file in csv_files:  
    # 打开CSV文件并读取数据  
    with open(csv_file, 'r') as file:  
        reader = csv.reader(file)  
        # 遍历每一行数据  
        rows = []  
        for row in reader:  
            # 如果这一行两列数据相同,则跳过这一行  
            if check_duplicate(row):  
                continue  
            # 否则将这一行添加到rows列表中  
            rows.append(row)  
      
    # 将处理后的数据写入一个新的CSV文件  
    with open(f'{csv_file}_new', 'w', newline='') as file:  
        writer = csv.writer(file)  
        writer.writerows(rows)

可以使用pandas库来实现

读取数据后,用pandas库可以去重

使用pandas库来读取CSV文件并处理数据。以下是一个示例代码,可以删除CSV文件中相同的两列数据的重复行,并将结果保存为新的CSV文件。

import pandas as pd

# 读取CSV文件
df = pd.read_csv('input.csv', delimiter=' ')  # 根据实际情况设置分隔符

# 删除重复行
df = df.drop_duplicates(subset=[0, 1])

# 保存到新的CSV文件
df.to_csv('output.csv', index=False)

在上面的代码中,需要将文件名input.csv替换为你的输入文件名,并根据需要设置正确的分隔符。最后,输出文件会保存为output.csv

请确保已经安装了pandas库,可以使用以下命令在命令行中安装它:

pip install pandas

运行代码后,会得到一个新的CSV文件output.csv,其中已删除了相同两列数据的重复行。

采用chatgpt:
以下是使用Python删除所有CSV文件中两列重复的一行数据并保存结果的示例代码:

import os
import csv

# 获取文件夹中的所有CSV文件
folder_path = "path_to_folder"  # 替换为CSV文件所在的文件夹路径
csv_files = [file for file in os.listdir(folder_path) if file.endswith('.csv')]

# 遍历每个CSV文件
for file in csv_files:
    file_path = os.path.join(folder_path, file)
    temp_file_path = os.path.join(folder_path, 'temp.csv')
    
    # 打开CSV文件并创建临时文件
    with open(file_path, 'r') as csv_file, open(temp_file_path, 'w', newline='') as temp_file:
        reader = csv.reader(csv_file)
        writer = csv.writer(temp_file)
        unique_rows = set()  # 用于存储唯一的行数据
        
        # 遍历每一行数据
        for row in reader:
            key = tuple(row[:2])  # 使用前两列作为唯一标识符
            if key not in unique_rows:
                unique_rows.add(key)
                writer.writerow(row)
    
    # 删除原始CSV文件并将临时文件重命名为原始文件名
    os.remove(file_path)
    os.rename(temp_file_path, file_path)

请确保将 path_to_folder 替换为包含CSV文件的文件夹的实际路径。此代码将遍历指定文件夹中的所有CSV文件,并删除每个文件中两列重复的行数据。删除后,结果将保存回原始文件中。

在运行代码之前,请确保在处理文件时备份原始CSV文件,以防意外发生。

您可以使用Python的pandas库来处理CSV文件并删除两列重复的行。下面是一个示例代码,它将读取CSV文件,删除重复行,然后将结果保存为新的CSV文件:

import pandas as pd
import glob

# 获取所有的CSV文件
csv_files = glob.glob("*.csv")

# 遍历每个CSV文件
for file in csv_files:
    # 读取CSV文件
    df = pd.read_csv(file, header=None, delimiter=" ")

    # 删除重复行
    df.drop_duplicates(subset=[0, 1], keep="first", inplace=True)

    # 保存结果为新的CSV文件
    output_file = "new_" + file
    df.to_csv(output_file, header=False, index=False, sep=" ")

    print(f"Processed {file}. Result saved as {output_file}.")

请将上述代码保存为Python脚本,然后将脚本放置在CSV文件所在的目录中。运行脚本后,它将遍历所有的CSV文件,并将删除重复行后的结果保存为以 "new_" 开头的新文件。

注意:在运行脚本之前,请确保已经安装了pandas库,可以使用以下命令进行安装:

pip install pandas

请将代码中的"*.csv"替换为适用于您的文件命名模式,以匹配要处理的CSV文件。