gpt4 book ai didi

python - 从 CSV 中确定数据类型 - Python

转载 作者:太空宇宙 更新时间:2023-11-03 14:49:18 25 4
gpt4 key购买 nike

我是 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”中收到的示例:

  {'1','2','2'}
{'4.0','2.0','2.5'}
.
.
.

如您所见,我的 csv 文件中的数据相同,但按列结构。

好的,这是我的问题。

我必须根据它们的参数来确定每一列的类型,也就是说,假设第一列{'1', '2', '3'},检查第一个元素,那个元素是该列的类型,在本例中,该列的类型为 int。

另一个 {'4.0', '2', '2.5'} 的例子,我检查了主要元素的类型并确定它是 float。

对于 {'?', '?' 的情况, '?'} 类型将是“不确定的”。

但是,问题来自符号“?”,如果我得到这些符号,我必须检查列的下一个元素,它将是名为“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**

最佳答案

我更改了函数的名称,使它们更有意义:

def determinar_tipo(valor):
if valor == '?':
return 'undetermined'
try:
int(valor)
except ValueError:
pass
else:
return int
try:
float(valor)
except ValueError:
return str
else:
return float

def determinar_tipos(lista):
aux = []
for columna in itertools.izip(*lista):
i = 0
while i < len(columna) and columna[i] == '?':
i += 1
aux.append(columna[i])
for i, each in enumerate(aux):
aux[i] = determinar_tipo(each)
return aux

关于python - 从 CSV 中确定数据类型 - Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47072285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com