使用Python Pandas将列的值更改为NULL并返回原始值

2024-04-20 01:03:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建一个Python脚本,它将在通过电子邮件发送之前自动将列值更改为NULL。在

因为我的目标是暂时改变一些列的数据。下面是它的样子:

svc_no   last_name   first_name   acc_no     some_column
12345    Parker      Peter        1111111    some_value
11111    Stark       Tony         2222222    some_value
22222    Rogers      Steve        3333333    some_value

我有多个Excel文件,我将把Excel文件发送给某人。有人会对这些Excel文件进行一些处理,但是在我通过电子邮件发送它之前,我需要将一些列值更改为NULL,因为它的机密性。在

我想要的输出如下:

^{pr2}$

以下是我所做的:

  1. 我迭代所有的文件并获得目录的路径来备份所有的Excel文件,这些文件将作为以后返回列的原始值的参考。我使用了os、*shutil**和glob库。在

    path = os.path.absolute(__file__)
    new_path = path + 'source'
    
    files = []
    
    if not os.path.exists(new_path):
        os.makedirs(new_path)
    
    for file in files:
        if file not in new_path:
            shutil.copy(file, new_path)
    # line continue in number 2 list
    

这些代码将在与脚本相同的目录中创建一个文件夹,并将所有Excel文件复制到新创建的目录new_path。在

  1. 现在,我将每个Excel文件声明为一个DataFrame,并使用.loc将列值更改为NULL

            df = pd.read_excel(file)
            df.loc[df['l_name'].notnull(), 'last_name'] = 'NULL'
    

我还尝试插入一个包含NULL值的列,并使用iloc将其复制到所需的列中,但也没有发生任何事情。它也没有创建列。在

df.insert(loc=5, column='empty_column', value='NULL')
df.iloc[:,1] = df.iloc[:,5]

我的问题是它没有将last_name列值更改为NULL。还有别的办法吗?在

我已经在我的一些项目中使用了.iloc和{},它们正在工作,但是我不明白为什么它们什么都不做。在

任何帮助将不胜感激。在


Tags: 文件pathnamedfnewvalueoscolumn
1条回答
网友
1楼 · 发布于 2024-04-20 01:03:14

我真的不认为这是问题所在。你似乎太复杂了。这还不够:

df

0   12345   Parker  Peter   1111111 some_value
1   11111   Stark   Tony    2222222 some_value
2   22222   Rogers  Steve   3333333 some_value

创建机密版本:

^{pr2}$

你得到这个:

confidential_df

0   12345   NULL    NULL    NULL    some_value
1   11111   NULL    NULL    NULL    some_value
2   22222   NULL    NULL    NULL    some_value

然后根据某些决定决定注销哪个项目:

confidential = True

def write()
    writer = pd.ExcelWriter('output.xlsx')
    if confidential:
        confidential_df.to_excel(writer, sheet_name='report')
    else:
         df.to_excel(writer, sheet_name='report')

write()

我不打算在写的时候处理路径/文件/目录管理,因为这似乎超出了您的问题范围。在

相关问题 更多 >