任务简介:

DataFrame元素中含有字符串,需要将如'1.5'之类的字符串转换为float类型,或者将'55'之类的字符串转换为int类型,即:'1.5' -> 1.5'55' -> 55

任务说明:

使用pandas函数astype('float')时,会出现错误:

ValueError: could not convert string to float

本文通过自定义函数解决:astype('float')函数could not convert string to float问题


自定义转换函数:

import pandas as pd

def SeriesFloat(series):
    """
    :param series: 输入的series
    :return: 元素转换为float或int后的series
    """
    length = len(series)
    FloatSeries = pd.Series([], dtype='object')
    index = 0
    for i in range(length):
        n = series[i]

        # 将可变为float或int类型的元素转换为float或int,不能转换的保留原格式
        try:
            if '*' in n:  # 运算符都需要考虑,我这边数据里只有乘号
                FloatSeries[index] = n
            else:
                FloatSeries[index] = eval(n)
        except Exception:
            FloatSeries[index] = n
        index += 1
    return FloatSeries

def DataFrameFloat(dataframe):
    """
    :param dataframe: 输入的dataframe
    :return: 元素转换为float或int后的dataframe
    """
    # 构建与传入dataframe列名相同的dataframe
    columns = []
    for column in dataframe.columns:
        columns.append(column)
    FloatDataFrame = pd.DataFrame(columns=columns)

    # 将元素转换为float的series赋值到目标dataframe
    for i in columns:
        series = dataframe[i]
        series = SeriesFloat(series)
        FloatDataFrame[i] = series
    return FloatDataFrame

读取数据,查看前五行:

nodes = pd.read_csv('./data/afv_base.csv')
nodes.head(5)

输出:

在这里插入图片描述


查看纯电续航里程这一列的第一条数据:

nodes['纯电续航里程(km)'][0]

输出:

'525'

可以看出输出为字符串类型


调用自定义函数DataFrameFloat()进行类型转换:

nodes = DataFrameFloat(nodes)

再次查看纯电续航里程这一列的第一条数据:

nodes['纯电续航里程(km)'][0]

输出:

525

OK,任务完成。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐