我是Python的新手,无法使用列表.
如您所见,我公开了我的问题,我有一个具有以下结构的datos.csv文件.
1,4.0,?,?,none,?
2,2.0,3.0,?,none,?
2,2.5,2.5,?,tc,39
使用此功能,我将数据存储在列表中.
def main():
lista = []
with open('datos.csv','r') as f:
for line in f:
lista.append(line.strip().split(','))
determinar_tipo(lista)
if __name__ == '__main__':
main()
至此,我没有问题.
但是,当我必须确定元素的类型时,问题就来了.
使用此代码,我可以按列组织列表
for columna in itertools.izip(*lista):
如所示,此代码使我可以将数据视为列,这是我从此“ for”中收到的示例:
06003
如您所见,是来自我的csv文件的相同数据,但按列结构.
好的,这是我的问题.
我必须根据其参数确定每个列的类型,即假设第一列{‘1′,’2′,’3’}检查第一个元素,并且该元素就是那个类型列,在这种情况下,此列的类型为int.
另一个带有{‘4.0′,’2′,’2.5’}的示例,我检查了主要元素的类型并确定它是浮点型的.
对于{‘?’,’?’ ,’?’}类型为“不确定”.
但是,问题出在符号“?”的问题上,如果我得到了这些符号,则必须检查该列的下一个元素,这将是名为“ word”,{‘?”,“ Word”, ‘5’},因此列的类型将为字符串.
这是我开发的用于验证它的代码,但是我没有正确确定类型.
def determinar_tipo(lista):
b = 0
aux = []
for columna in itertools.izip(*lista):
if columna[0] != "?": #If it's a number or string I save it
aux.append(columna[0])
print columna[0]
else: #If it's '?'
if len(columna) > b:
b = b + 1
if columna[b] != "?":
aux.append(columna[b])
b = 0
else:
b = b + 1
print b
#Correct code
for x in aux:
try:
var_type = type(int(x))
except ValueError:
try:
var_type = type(float(x))
except ValueError:
var_type = type(x)
print var_type
代码的第一部分负责将元素存储在另一个列表中,以确定每个列的类型,而代码的第二部分负责检查上一列表中每个元素的类型.
总之,我不知道如何使“ for”返回正确的元素以正确检查列的类型.
这是我的数据的正确答案:
1 , 4.0 , ? , ? , none , ?
2 , 2.0 , 3.0 , ? , none , ?
2 , 2.5 , 2.5 , ? , tc , 39
int float float undetermined string int**
本文链接:https://my.lmcjl.com/post/3863.html
4 评论