【问题标题】:Python: no change in a pandas dataframe column when using apply function [duplicate]Python:使用应用函数时,熊猫数据框列没有变化[重复]
【发布时间】:2021-09-15 12:19:08
【问题描述】:

作为一个可重现的示例,我创建了以下数据框:

dictionary = {'Metropolitan area': ['New York City','New York City','Los Angeles', 'Los Angeles'],
              'Population (2016 est.)[8]': [20153634, 20153634, 13310447, 13310447],
              'NBA':['Knicks',' ',' ', 'Clippers']}

df = pd.DataFrame(dictionary)

为了将df['NBA'] 中的任何空格替换为“无”,我创建了以下函数:

def transform(x):
if len(x)<2:
    return None
else:
    return x

我使用.apply 方法在df['NBA'] 上应用:

df['NBA'].apply(transform)

这样做之后,我得到以下输出,这似乎是成功的:

> 0           Knicks
1    Missing Value
2    Missing Value
3         Clippers
Name: NBA, dtype: object

但是,这里的问题是,当我调用 df 时,df['NBA'] 没有被转换,并且我从一开始就得到了该列,并且空格仍然存在并且没有被 None 替换:

    Metropolitan area   Population (2016 est.)[8]   NBA
0   New York City            20153634              Knicks
1   New York City            20153634   
2   Los Angeles              13310447   
3   Los Angeles              13310447              Clippers

我做错了什么?我误解了.apply 方法吗?

【问题讨论】:

    标签: python pandas apply


    【解决方案1】:

    命令df['NBA'].apply(transform)自己会执行该操作,但不会将其保存到内存中的原始DataFrame中。

    所以你只需要保存新列:

    df['NBA'] = df['NBA'].apply(transform)
    

    结果DataFrame应该是:

    Metropolitan area  Population (2016 est.)[8]       NBA
    0     New York City                   20153634    Knicks
    1     New York City                   20153634      None
    2       Los Angeles                   13310447      None
    3       Los Angeles                   13310447  Clippers
    
    

    【讨论】:

    • 哦,对不起@Bill the Lizard,我在写的时候没有看到你发布了答案。
    • 不用担心。我不能告诉你我做过多少次同样的事情。 :)
    【解决方案2】:

    apply 的结果分配回列。

    df['NBA'] = df['NBA'].apply(transform)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-30
      • 1970-01-01
      • 2019-10-24
      • 2019-05-07
      • 2021-09-17
      • 2019-02-07
      • 2021-11-05
      • 2017-12-19
      相关资源
      最近更新 更多