【问题标题】:For loop not working in function on strings columnFor 循环在字符串列的函数中不起作用
【发布时间】:2020-05-22 08:04:30
【问题描述】:

我正在处理一个房地产数据集,其中有一列包含指向公寓楼层的字符串(例如,“1° di 4 piani”,意大利语中的 4 个楼层中的第一个)。 我的想法是循环遍历列的每个元素以使用此循环对其进行清理以检查其是否正常工作:

    for f in df['floor']:
        try:
            if '1°' in f:       
                print(1)
            else:
                print(0)
        except TypeError:
            pass

在我在函数中使用这种代码来应用之前,一切似乎都有效:

def floor_edit(floor):
    try:
        for f in floor:
            if '1°' in f:       
                return 1
            else:
                return 0
    except TypeError:
        pass

然后我应用函数:

df['floor'] = df['floor'].apply(floor_edit)

列填充所有无值。 我知道这可能是一个非常基本的错误,但我整天都被困在这里。

【问题讨论】:

  • 抱歉,帖子中输入错误(不在实际代码中)
  • 你为什么在地板上循环?你已经在使用 apply 函数了。
  • 函数没有返回值,除了...可能有诀窍

标签: python string pandas function for-loop


【解决方案1】:

如果为apply 创建函数,则不必循环。

df = pd.DataFrame({"floor":["15","20","ABCDE","1° di 4 piani"]})

def floor_edit(s):
    if '1°' in s:
        return 1
    else:
        return 0

df["new"] = df["floor"].apply(floor_edit)

           floor  new
0             15    0
1             20    0
2          ABCDE    0
3  1° di 4 piani    1

但更好的是使用str.contains:

df["found"] = df["floor"].str.contains("1°").astype(int)

           floor  found
0             15      0
1             20      0
2          ABCDE      0
3  1° di 4 piani      1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多