【问题标题】:Can't remove a decimal from a pandas series无法从熊猫系列中删除小数
【发布时间】:2020-10-03 22:45:42
【问题描述】:

我正在尝试从熊猫系列中删除小数。目前它是一个熊猫花车。我会将其转换为字符串。然后我想删除小数点,以便我可以使用此列合并其他数据集。这是代码的原始输出。 Census Tract Number 列是我要更​​改的内容。

State   County                              Census Tract Number    Life Expectancy
4737    California  Los Angeles County, CA  1011.10                 79.2
4738    California  Los Angeles County, CA  1011.22                 80.0
4739    California  Los Angeles County, CA  1012.10                 82.5
4740    California  Los Angeles County, CA  1012.20                 78.5
4741    California  Los Angeles County, CA  1013.00                 80.0

以下代码数据类型本来是浮点数,我把它转成字符串了:

df202['Census Tract Number'] = df202['Census Tract Number'].astype(str)

我收到以下错误但能够继续:

A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

这就是数据框演变成的样子:

4737    California  Los Angeles County, CA  1011.1  79.2
4738    California  Los Angeles County, CA  1011.22 80.0
4739    California  Los Angeles County, CA  1012.1  82.5
4740    California  Los Angeles County, CA  1012.2  78.5
4741    California  Los Angeles County, CA  1013.0  80.0

我不希望它在末尾删去零,但我继续尝试删除小数:

df202['Census Tract Number'] = df202['Census Tract Number'].replace('.', '')

小数点不删除。

请帮忙!

【问题讨论】:

    标签: python pandas replace etl data-cleaning


    【解决方案1】:

    您可以使用一个小的正则表达式来提取人口普查区号:

    df['Census Tract Number'] = df['Census Tract Number'].astype(str).str.extract('([0-9]{4})')
    

    编辑:

    只替换点:

    df['Census Tract Number'] = df['Census Tract Number'].astype(str).str.replace('.', '')
    

    【讨论】:

    • 您好,谢谢。不幸的是,这个答案去掉了小数点后的数字,我仍然需要这些数字,因为它们是我数据中的重要标识符
    • @ChuckEPryor 嗨,我一定误解了这个问题。查看我的编辑。
    【解决方案2】:

    你可以这样做:

    df202['Census Tract Number'] = df202['Census Tract Number'].apply(lambda x : round(x))
    print(df.head())
    #State   County                              Census Tract Number    Life Expectancy
    #4737    California  Los Angeles County, CA  1011                 79.2
    #4738    California  Los Angeles County, CA  1011.22              80.0
    #4739    California  Los Angeles County, CA  1012                 82.5
    #4740    California  Los Angeles County, CA  1012                 78.5
    #4741    California  Los Angeles County, CA  1013                 80.0
    

    【讨论】:

    • 嗨,谢谢...此代码不执行。即使我仍然需要小数点后的数字保持完整。
    • 应该使用此代码而不是您的试用版。所以,用这个代替df202['Census Tract Number'] = df202['Census Tract Number'].astype(str)。如果您仍然想要数字,那么您可以轻松创建另一列。
    猜你喜欢
    • 2013-12-12
    • 2022-07-13
    • 2021-09-25
    • 1970-01-01
    • 1970-01-01
    • 2016-11-12
    • 1970-01-01
    • 2016-04-11
    相关资源
    最近更新 更多