Pandas dtype object 对象转化成float数组以及String Replace Error 解决方法

新手友好的纯小白入门指南,因为我自己也是小白。

Pandas读取csv文件后遇到了问题,读入的数据DataFrame格式可以理解为字典,每一个column对应csv表格中的一列。为了进行下一步处理,需要将原来的数据转化为浮点数(float)格式。但是使用dtype()查看了一下,发现需要读数据的那一列的元素格式是object。是我比较菜,python才入门一个星期,实在不知道这是什么东东。

读出来的数据是这样的,格式是123?45的样子。这里的问号?其实应该改成小数点的。

所以现在的任务是把123?45变成123.45,并且存到一个列表里。

首先想到的就是直接进行str.replace()操作,但是,很不幸,没有用,白白折腾了一晚上。

于是想到是不是因为是object对象的问题呢,那么试着把object对象转化成string也许就可以操作了,结果……

string和object他俩就是一个东西啊!!!!!

传送门:https://blog.csdn.net/a8131357leo/article/details/79635866

自然,对整个数组进行str.replace()之后检查得到的还是object对象了。

在stackoverflow上搜了一下发现超级多人也在问这个问题。最后发现如果是对整个

data['Latitude'] = data['Latitude'].astype('str')

然后直接

data['Latitude'] = data['Latitude']str.replace(x1, "? ", ".")

进行操作是无效的。但是!对单个元素的操作是有效的。也就是需要加上一个Series对象遍历的过程;并且在遍历的过程中,使用正则表达式搜查到符合数据格式的条目,然后直接在Series对象内部,逐个进行格式匹配,replace,和计算对应的浮点数的过程。

data = pd.read_csv('/Users/nie/Downloads/test2.csv', encoding = 'utf-8')
data['Latitude'] = data['Latitude'].astype('str')
data1 = []
for x in range(0, len(data['Latitude'])):
    x1 = data['Latitude'][x]
    x2 = str.replace(x1, "? ", ",")
    num = 0
    if re.match("\d\d,\d\d.\d\d\d",x2):
        num = float(x2[3]) * 10 + float(x2[4]) + float(x2[6]) * 0.1 + float(x2[7]) * 0.01 + float(x2[8]) * 0.001
        num = round(num, 3)
        data1.append(num)
print(data1)

至于为什么需要单个元素进行处理,我也不是很清楚……但是实测有效。

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 可以使用pandas中的astype()函数将object类型的数据化为float类型。具体操作如下: 1. 读取数据,将object类型的列读取为pandas的Series对象。 2. 使用astype()函数将Series对象化为float类型。 3. 将化后的数据保存或者进行其他操作。 示例代码如下: ```python import pandas as pd # 读取数据 data = pd.read_csv('data.csv') # 将object类型的列化为float类型 data['column_name'] = data['column_name'].astype(float) # 保存数据或进行其他操作 data.to_csv('new_data.csv', index=False) ``` 其中,'column_name'为需要化的列名。 ### 回答2: 在Pandas中,有时候需要将数据类型从object换为float,以便进行数值计算或者其他操作。首先,我们需要了解一下Pandas中的数据类型,主要包括三种:数值型、文本型和时间型。其中数值型又分为整数型(int)和浮点型(float)两种。 一般情况下,我们可以使用Pandas中的astype()函数实现数据类型换。具体操作如下: 1、 导入Pandas库并读取数据: ``` import pandas as pd data = pd.read_csv('data.csv') ``` 2、 查看数据类型: ``` print(data.dtypes) ``` 输出结果一般为: ``` Column1 object Column2 object Column3 object dtype: object ``` 这里假设需要将Column2列的数据类型从object换为float。 3、 使用astype()函数进行换: ``` data['Column2'] = data['Column2'].astype(float) ``` 4、 再次查看数据类型: ``` print(data.dtypes) ``` 输出结果为: ``` Column1 object Column2 float64 Column3 object dtype: object ``` 以上就是Pandasobject化为float的操作步骤。需要注意的是,在进行数据类型换时,只能将能够换的数据类型进行换,不能将非数值型的数据换为数值型,否则会报错。在实际数据分析中,我们应该仔细观察数据类型,选择正确的数据类型进行操作,以免出现数据错误。 ### 回答3: Pandas是一个数据处理库,拥有非常强大的数据处理和数据分析功能。在Pandas中,对象object)是指任意一种Python对象的Series或DataFrame。对象可能包含各种不同的数据类型,例如字符串、浮点数、整数等等。在处理数据时,有时需要将对象化为浮点数,这可以通过Pandas提供的to_numeric函数来实现。 to_numeric函数可以将对象化为浮点数。它的用法比较简单,可以接受一个Series或DataFrame作为输入,并返回一个相同大小的Series或DataFrame,其中所有的非数值类型将被化为NaN(缺失值)。例如,下面是一个将Series对象化为浮点数的示例: ```python import pandas as pd s = pd.Series(['1.1', '2.2', '3.3']) s = pd.to_numeric(s, errors='coerce') print(s) ``` 输出结果为: ```python 0 1.1 1 2.2 2 3.3 dtype: float64 ``` 在上面的示例中,我们将一个包含浮点型字符串的Series对象化为一个浮点型Series对象。注意,在这个示例中,我们还使用了errors参数设置为'coerce',这样在遇到无法化的值时,函数会将它们设置为NaN。 如果要将整个DataFrame对象中的对象化为浮点型数据,可以使用apply函数和to_numeric函数结合的方式。例如,下面的示例将DataFrame对象dframe的所有列化为浮点型数据: ```python import pandas as pd dframe = pd.DataFrame({ 'col1': ['1.1', '2.2', '3.3'], 'col2': ['4.4', '5.5', '6.6'], 'col3': ['7.7', '8.8', '9.9'] }) dframe = dframe.apply(pd.to_numeric, errors='coerce') print(dframe) ``` 输出结果为: ```python col1 col2 col3 0 1.1 4.4 7.7 1 2.2 5.5 8.8 2 3.3 6.6 9.9 ``` 在上面的示例中,我们使用apply函数,将to_numeric函数应用到dframe的每一列上,并将返回的结果重新赋值给dframe。这样,整个DataFrame对象的所有列就被化为了浮点型数据。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值