【问题标题】:For Loops and if statements in Pandas DataframePandas Dataframe 中的 For 循环和 if 语句
【发布时间】:2020-04-03 06:35:20
【问题描述】:

我正在尝试获取行值是否满足某些条件

这里是代码

response='108'
group="MAMA"
optout='False'

for row in merged_df:
        if row==response & row==group & row==optout:
            print(merged_df['phone'])

我的数据框看起来像这样

phone       group   County  PNC/ANC Facility Name   Optedout    Facility Code
25470000000 MAMA    Orange  PNC     Main Centre       FALSE      112
25470000000 MAMA    Orange  PNC     Main Centre       FALSE      112
25470000010 MAMA    Orange  PNC     Centre            FALSE      108
25470000020 MAMA    Orange  PNC     Centre            FALSE      108
25470000000 MAMA    Orange  PNC     Main Centre       FALSE      112

这是我得到的错误

    read_masterFacility()
  File "readsheet.py", line 48, in read_masterFacility
    if row==response & row==group & row==optout:
TypeError: unsupported operand type(s) for &: 'int' and 'str'

想要的输出

25470000010 
25470000020

我怎样才能做得更好?

【问题讨论】:

  • 尽可能避免原生 python for 循环...当您使用 Pandas 或 numpy 的内置函数时,您将获得更快的代码。另外,请发布数据而不是图片,并提供预期的输出(也是数据)

标签: python pandas dataframe for-loop if-statement


【解决方案1】:

发生错误是因为& 是按位比较。第二个问题是如果merged_df 是一个数据框,for row in merged_df 只会遍历它的列名。你应该这样做:

修改后的代码:

phones = merged_df.loc[(merged_df['Facility Code'] == response) & (merged_df['group'] == group) & (merged_df['Optedout'] == optout)]['phone'].values
print(phones)

【讨论】:

  • 我没有收到任何错误,但我也没有收到任何输出
  • 尝试optout = 'FALSE' 而不是'False',因为它在数据框中是FALSE
  • 我这样做了,但仍然没有输出,也没有错误需要输出25470000010 25470000020
  • 返回一个空列表[ ]
  • 您确定设施代码是整数而不是字符串?
【解决方案2】:

您将需要以下内容:

if ((row["Facility Code"]==response and row["group"]==group) and row["optedout"]=optout):

这是有效的,因为您正在检查每一列的行中的值。您需要指定要检查的列。 '&' 在 Python 中也是按位和。

另外,我想你想打印出 row["phone"]。

【讨论】:

  • 我收到此错误TypeError: string indices must be integers
  • 行的类型是什么:merged_df 是数据框吗?您可以检查 type(merged_df)
  • merged_df 是一个数据框...所有列的 dtype 是 object
  • 关于没有得到输出 - 它应该是 print(row['phone']) 在最后一行吗?
  • 如果所有条件都为真,我只想打印我的 df 中的所有电话号码
猜你喜欢
  • 2013-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-31
  • 2013-12-28
  • 2021-06-27
  • 1970-01-01
  • 2016-06-16
相关资源
最近更新 更多