新手友好的纯小白入门指南,因为我自己也是小白。
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)
至于为什么需要单个元素进行处理,我也不是很清楚……但是实测有效。