Python Pandas将列类型转换为numeri

2024-09-28 20:43:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我对使用python/pandas以一种有组织的、可重复的、确定的方式清理英国国家小学生数据库中的数据是新手。完整的数据集在这里提供https://www.compare-school-performance.service.gov.uk/download-data 我找不到如何向这个问题添加一个表,但是有标题;RECTYPE、PCODE、totpup、KS2APS数据框>>> np.asanyarray(df)看起来像这样。在

    array([[1, 'NW1 1TA', '642', '27.6'],
    [1, 'NW1 1RX', '881', '26.5'],
    [1, 'NW5 1RN', 'NEW', '29.5'],
    [1, 'BN6 8LP', '1046', 'SUPP']], dtype=object)

Rectype总是包含整数,这样我就可以在数字上成功地进行过滤。问题是总学生数和KS2平均优先成绩(TOTPUPS,KS2APS)应该是整数和浮点类型,但包含频繁字符串。在

我已经成功地用df = df[df.KS2APS != "SUPP"]过滤掉了这些内容。在

最后一步是基于TOTPUPSdf = df[df.TOTPUPS > 199]进行数值滤波。失败的是TypeError: '>' not supported between instances of 'str' and 'int' 因为包含非数字数据的列是这样转换的,所以我使用.to\u numeric

^{pr2}$

这告诉我类型现在是int64。。。但当我尝试用数字滤波时还是失败了。this stack overflow post表示如果失败,那是“因为你有不可转换的对象”。为了检查我是否已将输出写入csv文件并在Excel中打开(没那么有用!)记事本上显示的值都是整数空字符串,所以我也尝试过删除空字符串,然后将.转换为\u numeric和filtering,但仍然没有乐趣。在

我有一个非常糟糕但非常有效的解决方法,把我的数据帧写入一个文件并读回,但我还是想知道我哪里出错了。在

更新 我的解决方案(变通办法!)创建新列确实有效。。。在

df['TOTPUPSint'] = pd.to_numeric(df.TOTPUPS)
df = df[df.TOTPUPSint > 199]
len(df)
3113
np.asanyarray(df)
array([[1, 'NW1 1TA', '642', '27.6', 642],
    [1, 'NW1 1RX', '881', '26.5', 881],
    [1, 'NW5 1RN', '805', '29.5', 805],
    ...,
    [1, 'RH19 3TY', '1616', '28.1', 1616],
    [1, 'RH14 9RY', '1621', '28.3', 1621],
    [1, 'BN6 8LP', '1046', '29.4', 1046]], dtype=object)

同时也验证了结果与预期相符,但这仍然是一个解决方案,而不是正确地理解问题。在

我的数据帧现在看起来像

array([[1, 'NW1 1TA', 642, '27.6', 642],
    [1, 'NW1 1RX', 881, '26.5', 881],
    [1, 'NW5 1RN', 805, '29.5', 805],
    ...,
    [1, 'RH19 3TY', 1616, '28.1', 1616],
    [1, 'RH14 9RY', 1621, '28.3', 1621],
    [1, 'BN6 8LP', 1046, '29.4', 1046]], dtype=object)

第三列和第五列都没有引号。我是新来的这个论坛,但如果有什么方法标记黑暗的有用的答案是正确的,请让我知道。谢谢。在


Tags: 数据字符串dfobjectnp整数arraydtype