【问题标题】:Python / Pandas - Transform phone numbers from float to ints in a column with NaNsPython / Pandas - 将电话号码从浮点数转换为具有 NaN 的列中的整数
【发布时间】:2018-02-18 06:21:04
【问题描述】:

我有一个带有浮点数和 NaN 列的数据框。 这些是电话号码,它们看起来像浮点数一样奇怪(最后得到一个“.0”,电话号码看起来像这样 5551981180099.0)。我尝试使用 df['phone'].astype(int) 来解决这个问题,但是它与 NaN 存在错误,并且出现“无法将 NA 转换为 int”错误。

所以我用这个蛮力:

for i in range(len(df.index)):
    if pd.isnull(df['phone'][i]) == False:
        df['phobe'][i] = int(df['phone'][i])

但是当我print(type(df['phone'][i])) 它告诉我它仍然是class 'numpy.float64'

我尝试了一切将其转换为其他东西以使电话号码看起来不错(转换为字符串并取出最后两个字符,应用 astype(str)、astype(int) 等),但似乎没有任何效果。

有什么建议吗?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    如果您有NaN 值和int,根据设计,所有值都将转换为floats。

    您可以将NaN 替换为一些int,然后可以将列转换为int

    df['phone'] = df['phone'].fillna(0).astype(int)
    

    或者先删除NaN行:

    df = df.dropna(subset=['phone'])
    df['phone'] = df['phone'].astype(int)
    

    或者将所有值替换为str,然后删除.0,然后得到字符串NaN(不缺值):

    df['phone'] = df['phone'].astype(str).str.replace('\.0', '')
    

    如果需要删除最后 2 个字符,请使用 indexing with str:

    df['phone'] = df['phone'].astype(str).str.replace('\.0', '').str[:-2]
    

    【讨论】:

    • . 是替换功能的通配符。它应该用 ` \ ` 转义
    猜你喜欢
    • 2020-08-26
    • 1970-01-01
    • 2017-06-11
    • 2017-10-14
    • 2017-03-20
    • 1970-01-01
    • 1970-01-01
    • 2014-02-13
    相关资源
    最近更新 更多