提取na_count键值列表时报错:'numpy.ndarray' object is not callable
解决提取缺失值统计时的TypeError问题
问题场景
我有一个311服务请求数据库,想要绘制各字段缺失值数量(na_count)的柱状图,但提取键值列表时报错:TypeError: 'numpy.ndarray' object is not callable。
相关代码
import numpy as np import pandas as pd import matplotlib.pyplot as plt ny = pd.read_csv("311_Service_Requests_from_2010_to_Present.csv") na_count = ny[ny.columns].isna().sum() dic_keys = list(na_count.keys()) dic_values = list(na_count.values())
报错堆栈
TypeError Traceback (most recent call last) /tmp/ipykernel_258/3214600081.py in <cell line: 1>() ----> 1 dic_values = list(na_count.values()) TypeError: 'numpy.ndarray' object is not callable
na_count输出内容
Unique Key 0 Created Date 0 Closed Date 380 Agency 0 Agency Name 0 Complaint Type 1 Descriptor 975 Location Type 1 Incident Zip 428 Incident Address 7825 Street Name 7825 Cross Street 1 8763 Cross Street 2 8838 Intersection Street 1 57161 Intersection Street 2 57241 Address Type 488 City 429 Landmark 64865 Facility Type 376 Status 1 Due Date 1 Resolution Description 1 Resolution Action Updated Date 369 Community Board 1 Borough 1 X Coordinate (State Plane) 570 Y Coordinate (State Plane) 570 Park Facility Name 1 Park Borough 1 School Name 1 School Number 1 School Region 1 School Code 1 School Phone Number 1 School Address 1 School City 1 School State 1 School Zip 1 School Not Found 1 School or Citywide Complaint 64904 Vehicle Type 64904 Taxi Company Borough 64904 Taxi Pick Up Location 64904 Bridge Highway Name 64843 Bridge Highway Direction 64843 Road Ramp 64852 Bridge Highway Segment 64852 Garage Lot Name 64904 Ferry Direction 64904 Ferry Terminal Name 64904 Latitude 570 Longitude 570 Location 570
问题原因
na_count是pandas的Series对象,它的values是一个numpy数组属性,不是可调用的方法。写成na_count.values()相当于把数组当成函数调用,自然触发TypeError。
解决方案
修正键值提取代码
- 提取字段名(键):直接用Series的
index属性转列表,比keys()更直观 - 提取缺失值数量(值):调用
values属性(不加括号)再转列表,或直接用tolist()方法
修正后的核心代码:
# 提取字段名列表 dic_keys = na_count.index.tolist() # 提取缺失值数量列表 dic_values = na_count.values.tolist() # 或者更简洁:dic_values = na_count.tolist()
完整绘图代码
如果要完成柱状图绘制,可以用以下完整代码:
import numpy as np import pandas as pd import matplotlib.pyplot as plt # 读取数据 ny = pd.read_csv("311_Service_Requests_from_2010_to_Present.csv") # 统计各字段缺失值数量(ny[ny.columns]可省略,直接调用isna()即可) na_count = ny.isna().sum() # 提取键值列表 dic_keys = na_count.index.tolist() dic_values = na_count.values.tolist() # 绘制柱状图 plt.figure(figsize=(12, 6)) plt.bar(dic_keys, dic_values) plt.xticks(rotation=90) plt.xlabel('字段名称') plt.ylabel('缺失值数量') plt.title('各字段缺失值统计') plt.tight_layout() plt.show()
内容的提问来源于stack exchange,提问作者Ab3ila
相关产品推荐
相关产品推荐

