numpy拼接邮编数组后排序触发AxisError和类型错误如何解决?
问题解决方法
错误根因说明
AxisError错误:np.concatenate使用不当导致最终得到的a为0维标量,排序时无法识别指定轴。二维数组转一维优先使用flatten()方法,可避免参数传递错误。TypeError错误:数组内的空值nan为float类型,字符串与float类型无法直接比较大小,需先完成空值处理。
具体解决步骤
步骤1:正确将二维数组转为一维数组
直接调用numpy数组的flatten()方法完成展平:
a = b.flatten()
步骤2:处理数组中的空值
如果不需要保留空邮编,可以直接过滤掉所有nan:
# 用pandas的isna方法识别空值,取反后过滤 a = a[~pd.isna(a)]
如果需要保留空值,可以将nan替换为空字符串占位,保证所有元素都是字符串类型:
a = np.where(pd.isna(a), '', a)
步骤3:执行排序
处理完成后两种排序方法都可以正常运行:
# 方法1:返回排序后的新数组 sorted_a = np.sort(a) # 方法2:直接在原数组上排序 a.sort()
完整示例代码
import pandas as pd import numpy as np cols = [2,4,6,8,10,12,14,16,18] df = pd.read_csv('mywork.csv') df1 = df.iloc[:, cols] b = np.array(df1) # 展平+处理空值 a = b.flatten() a = a[~pd.isna(a)] # 排序 print(np.sort(a))
内容的提问来源于stack exchange,提问作者Rosemary
相关产品推荐
相关产品推荐

