【问题标题】:How to fix AttributeError: 'NoneType' object has no attribute 'loc'(Pandas)?如何修复 AttributeError:“NoneType”对象没有属性“loc”(Pandas)?
【发布时间】:2021-01-03 16:29:21
【问题描述】:

我有一个熊猫脚本。

import pandas as pd

data = pd.read_csv('sample.csv',delimiter=',')

def mapping(df):
     #work of data mapping
     for column_name, column in df.transpose().iterrows():
         df.rename(columns ={'first name' : 'FNAME', 'secret': 'CODE'}, inplace = True)
         df.rename(columns ={'alias' : 'FNAME', 'code': 'CODE'}, inplace = True)
         df.rename(columns ={'initial name' : 'FNAME', 'id': 'CODE'}, inplace = True)

final_df = mapping(data)

#If the code is greater than 12 digits, leave it blank
final_df.loc[final_df['CODE'].astype(str).str.len() >12, 'CODE']= ''

我得到的错误是:

final_df.loc[final_df['CODE'].astype(str).str.len() >12, 'CODE']= ''
AttributeError: 'NoneType' object has no attribute 'loc'

有什么解决办法吗?

【问题讨论】:

  • 检查type(final_df) ?看起来问题出在函数中,当您通过数据框 mapping(data) 调用它时返回 None
  • 当我只返回 mapping(data) 时,它会显示数据,但是当 final_df = mapping(data) ,print(final_df) 它返回 None
  • print(type(mapping(data))) 的结果是什么?
  • 结果是 NoneType@anky
  • 从每一行中删除inplace=True。将 df.rename(columns ={'first name' : 'FNAME', 'secret': 'CODE'}, inplace = True) 更改为 df=df.rename(columns ={'first name' : 'FNAME', 'secret': 'CODE'}) 对所有 3 行执行此操作(尽管您可以将所有重命名组合在一个字典中)并将 return df 添加到函数的最后一行。

标签: python python-3.x pandas dataframe numpy


【解决方案1】:

您的mapping 函数不返回任何内容。因此,当您将其分配给final_df 时,不会将任何内容分配给它使其成为None

您应该在函数的最后一行添加return df 以获得所需的内容。

【讨论】:

    【解决方案2】:

    这意味着final_df变量是None(上面的函数实际上返回None而对象None确实没有loc这个属性。

    确保此函数 mapping 返回您要实际返回的对象。

    【讨论】:

    • 当我只返回 mapping(data) 时,它会显示数据,但是当 final_df = mapping(data) ,print(final_df) 它返回 None
    • 你的函数映射应该返回你刚刚修改的实际对象,否则一个没有返回语句的函数默认返回None
    猜你喜欢
    • 1970-01-01
    • 2021-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-25
    相关资源
    最近更新 更多