【问题标题】:lambda code to capitalize column not working用于大写列的 lambda 代码不起作用
【发布时间】:2018-03-23 11:11:21
【问题描述】:

当我执行下面的Python 3.4.4 代码以大写 ident 列下的值时,我没有收到任何错误,但我的输出没有大写。需要帮助找出问题。

import pandas as pd
import numpy as np
#Create a dataframe

data = {'ident': ['Jack', 'Mary', 'Teresa', 'James', 'Anna'], 
        'year': [2001, 2002, 2003, 2004, 2007], 
        'reports': [67, 5, 36, 9, 14],
        'scope': [17, 102, 57, 49, 77]
        }
df = pd.DataFrame(data, index = ['Bahia', 'Pico', 'Santa Fe', 'Maine', 
'Zuma'])
#Create a capitalizer function
capitalize = lambda x: x.upper()

#Create a capitalizing function over the column 'ident'

df['ident'].apply(capitalize)
print (df)

【问题讨论】:

  • 顺便说一句。这不能回答你的问题。下面就回答了。但是,您不需要单独的lambda。你可以这样做,df['ident'].apply(str.upper)。您未能重新分配该列。请参阅下面的答案。
  • 认为 Python 应该有一个规范的问答,上面写着 - 请分配回结果
  • @Divakar 我们已经看到了很多问题......当他们替换、应用、附加......

标签: python-3.x pandas numpy lambda


【解决方案1】:

如果你真的想使用 lambda 来大写特定的列,你可以使用这个代码:

 df = df.apply(lambda x: x.str.upper() if x.name in ['column1'] else x)

或将此代码用于多个特定列:

df = df.apply(lambda x: x.str.upper() if x.name in ['column1','column2','column3'] else x)

【讨论】:

    【解决方案2】:

    对数据框的更改不会直接保存回来。替换

    df['ident'].apply(capitalize)
    

    df['ident'] = df['ident'].apply(capitalize)
    

    它会起作用的。

    所以完整的代码如下:

    import pandas as pd
    import numpy as np
    #Create a dataframe
    
    data = {'ident': ['Jack', 'Mary', 'Teresa', 'James', 'Anna'],
            'year': [2001, 2002, 2003, 2004, 2007],
            'reports': [67, 5, 36, 9, 14],
            'scope': [17, 102, 57, 49, 77]
            }
    df = pd.DataFrame(data, index = ['Bahia', 'Pico', 'Santa Fe', 'Maine','Zuma'])
    #Create a capitalizer function
    capitalize = lambda x: x.upper()
    
    #Create a capitalizing function over the column 'ident'
    
    df['ident'] = df['ident'].apply(capitalize)
    print (df)
    

    或者做得更好(恕我直言)df.ident=df.ident.str.upper()

    【讨论】:

    • 您正在将整个数据框更改为系列标识
    • 查看编辑:我之前忘了给 ident 地址。对不起
    【解决方案3】:
    df.ident=df.ident.str.upper()
    df
    Out[1101]: 
               ident  reports  scope  year
    Bahia       JACK       67     17  2001
    Pico        MARY        5    102  2002
    Santa Fe  TERESA       36     57  2003
    Maine      JAMES        9     49  2004
    Zuma        ANNA       14     77  2007
    

    【讨论】:

      【解决方案4】:

      您需要将结果分配回 df['ident']

      df['ident'] = df['ident'].apply(capitalize)
      

      虽然我会简单地使用

      df['ident'] = df['ident'].str.upper()
      

      【讨论】:

        猜你喜欢
        • 2014-11-01
        • 1970-01-01
        • 2021-08-19
        • 2014-09-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多