无法从熊猫系列中删除小数

时间:2020-06-14 12:43:28

标签: python pandas replace etl data-cleaning

我正在尝试从熊猫系列中删除小数。目前这是一只熊猫花车。我将其转换为字符串。然后,我想删除小数点,以便可以使用此列合并其他数据集。这是代码的原始输出。我正在尝试更改“人口普查区号”列。

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('.', '')

小数点不会删除。

请帮助!

2 个答案:

答案 0 :(得分:0)

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

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('.', '')

答案 1 :(得分:0)

您可以简单地这样做:

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