【问题标题】:Conditional writing to xlsx有条件地写入 xlsx
【发布时间】:2019-05-27 20:18:41
【问题描述】:

伙计们,

我目前正在使用一个巨大的 Excel 表,python 3.7.1 和 pandas 0.23.4。 我的任务是根据条件匹配写入单元格。像这样的:

val = lincoln@gmx.net
if val in Cell_3A:
    write something to Cell_3B

为了做一个完整的例子,假设以下是我的数据框:

    Email               Protection
1   lincoln@gmail.net
2   obama@gmail.net
3   trump@gmail.net
4   franklin@gmail.net

我知道要写下所有电子邮件都受到保护,除了第 3 行中的电子邮件。所以完成的数据框应该如下所示:

    Email               Protection
1   lincoln@gmail.net   on
2   obama@gmail.net     on
3   trump@gmail.net     off
4   franklin@gmail.net  on

我如何做到这一点?

【问题讨论】:

  • 你能再解释一下吗,anky_91?
  • Mowgli 检查答案。 :)

标签: python pandas


【解决方案1】:

过滤电子邮件不是'trump@gmail.net'Protection 列,并将它们分配为“开启”,反之亦然。

df.loc[df['Email']!='trump@gmail.net', 'Protection']='on'
df.loc[df['Email']=='trump@gmail.net', 'Protection']='off'

使用np.where:

df['Protection'] = np.where((df['Email']!='trump@gmail.net'),'on','off')

或:

df['Protection'] = np.where((df['Email']=='trump@gmail.net'),'off','on')

【讨论】:

  • anky_91,我正要发布 np.where 解决方案,你快速击败了我 :-) +1,最简单也更胖。
  • 哈哈。 :D 是的,想发布这个,因为这更快。 :)
  • 谢谢!这似乎解决了我的问题,但是:“试图在 DataFrame 的切片副本上设置一个值。尝试使用 .loc[row_indexer,col_indexer] = value 代替”我们在这里得到一个 SettingWithCopyWarning!跨度>
  • 谢谢!最好的他妈的服务,先生。 This 帮了我很多。花了一些时间,但发现我在这种情况下以错误的方式声明了我的数据帧切片。
  • @anky_91 - 是的,如果有人开始使用 pandas,这是常见的错误,+1
【解决方案2】:

基于 if 和 else 条件的另一种解决方案:

数据帧:

>>> df
                Email Protection
0   lincoln@gmail.net
1     obama@gmail.net
2     trump@gmail.net
3  franklin@gmail.net

结果:

>>> df['Protection'] = ['On' if x !="trump@gmail.net"  else 'Off' for x in df['Email']]
 # df['Protection'] = ['Off' if x =="trump@gmail.net"  else 'On' for x in df['Email']]
>>> df
                Email Protection
0   lincoln@gmail.net         On
1     obama@gmail.net         On
2     trump@gmail.net        Off
3  franklin@gmail.net         On

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-17
    • 2017-02-24
    • 1970-01-01
    • 2014-09-16
    • 1970-01-01
    • 2021-09-11
    • 1970-01-01
    相关资源
    最近更新 更多