首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python Pandas将列值更改为NULL并返回原始值

Python Pandas将列值更改为NULL并返回原始值
EN

Stack Overflow用户
提问于 2018-08-05 00:31:49
回答 1查看 1.6K关注 0票数 0

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

我的目标是临时更改一些列的值,因为它的机密数据。下面是它看起来的样子:

代码语言:javascript
复制
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

我想要的输出将如下所示:

代码语言:javascript
复制
svc_no   last_name   first_name   acc_no     some_column
12345    NULL        NULL         NULL       some_value
11111    NULL        NULL         NULL       some_value
22222    NULL        NULL         NULL       some_value

下面是我所做的:

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

path = os.path.absolute(__file__) new_path = path + 'source‘files = []如果不是os.path.exists( new_path):os.makedirs(new_path)表示文件中的文件:如果文件不在new_path中: shutil.copy( file,new_path)#第2行继续列表

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

现在,我将每个

  • 文件声明为DataFrame,并使用.loc将列值更改为NULL

df =pd.read_excel(文件)名称[df‘l_df.loc’..notnull(),'last_name'] = 'NULL'

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

代码语言:javascript
复制
df.insert(loc=5, column='empty_column', value='NULL')
df.iloc[:,1] = df.iloc[:,5]

我的问题是它没有将last_name列值更改为NULL。有没有其他方法可以做到这一点?

我已经在我的一些项目中使用了.iloc.loc,它们正在工作,但我在这里感到困惑,为什么它们什么都不做。

任何帮助都将受到高度的感谢。

EN

回答 1

Stack Overflow用户

发布于 2018-08-05 01:38:45

我真的看不出这里有什么问题。你似乎把事情搞得太复杂了。这还不够吗:

代码语言:javascript
复制
df

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

创建机密版本:

代码语言:javascript
复制
confidential_columns = ['last_name', 'first_name', 'acc_no']

confidential_df = df.copy()
confidential_df[confidential_columns] = 'NULL'

你会得到这个:

代码语言:javascript
复制
confidential_df

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

然后根据一些决定决定在哪一项上注销:

代码语言:javascript
复制
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()

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51687559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档