在迭代每个 CSV 时,如何将我的 CSV 与我的配置进行比较?

How do I compare my CSV to my config as I am iterating through each one?

提问人:Lilcodemuffin 提问时间:11/1/2023 最后编辑:Lilcodemuffin 更新时间:11/1/2023 访问量:60

问:

这是我的代码:

import boto3
import pandas as pd
import json

s3 = boto3.resource('s3')
my_bucket = s3.Bucket('bucket-name-here')

def verify_unique_col():
    with open(r'unique_columns.json', 'r') as f:
        config = json.load(f)

    for my_bucket_object in my_bucket.objects.filter(Prefix='decrypted/'):
        if my_bucket_object.key.endswith('.csv'):
            filename = my_bucket_object.key.split('/')[-1]
            for table in config['Unique_Column_Combination']['Table_Name']:
                unique_col_comb = config['Unique_Column_Combination']['Table_Name'][f'{table}']
                df = pd.read_csv(f's3://path/to/{filename}', sep='|')
                df_unique = df.set_index(unique_col_comb.split(", ")).index.is_unique       
                print(df_unique)

verify_unique_col()

我正在尝试遍历存储桶中的每个 CSV 文件并读取每个文件,在读取一个文件后,我想确定该 CSV 中列的数据是否唯一。我在这里列出了在我的配置文件中应该是唯一的列:df = pd.read_csv(f's3://path/to/{filename}', sep='|')

{
    "Unique_Column_Combination":
    {
        "Table_Name":{
            "TABLE_1": "CLIENT, ADDRNUMBER, PERSNUMBER, CONSNUMBER, LAST_LOAD_DT",
            "TABLE_2": "CLIENT, ADDRNUMBER, CONSNUMBER, LAST_LOAD_DT",
            "TABLE_3": "CLIENT, ADDRNUMBER, DATE_FROM, NATION, LAST_LOAD_DT",
            "TABLE_4": "COMM_TYPE, CONSNUMBER, COMM_USAGE, VALID_TO, LOAD_DT",
        }
    }
}

所以我希望我的代码读取 csv,然后检查该表上面的列是否唯一,然后继续检查上面的列是否唯一等等......我现在的代码方式是,它很好地遍历了我的配置中的每个 CSV,但它只读取我的 s3 存储桶中的第一个 CSV,并将第一个 CSV 与我的配置中列出的所有表进行比较。我想做一个从TABLE_1.csv到TABLE_1,从TABLE_2.csv到TABLE_2的比较,等等......这可能吗?从理论上讲,我认为是,但它似乎太混乱了......TABLE_1.csvTABLE_1TABLE_2.csvTABLE_2Table_Name

Python JSON 熊猫

评论

0赞 Tim Roberts 11/1/2023
因此,您只想确定单个文件中是否有任何重复的行?这可以通过查看行数是否更改来完成。或者您正在尝试检查 ACROSS 文件?pd.drop_duplicates
0赞 Lilcodemuffin 11/1/2023
我只是想找到一种方法来迭代我正在阅读的每个 CSV 文件已有的过程
0赞 Tim Roberts 11/1/2023
您的函数已经遍历了存储桶,不是吗?我对什么不起作用感到困惑。
0赞 Lilcodemuffin 11/1/2023
当我执行代码时,目前的结果为: 但我希望输出是:TABLE_1.csv True TABLE_1.csv TrueTABLE_1.csv True TABLE_2.csv True
0赞 Lilcodemuffin 11/1/2023
基本上,它遍历存储桶,但它只是将它抓取的第一个 CSV 文件与我的整个 JSON 配置进行比较,而不是将 TABLE_1.csv 与 TABLE_1 进行比较,将 TABLE_2.csv 与 TABLE_2 进行比较

答: 暂无答案