pythoncsv数据类型_从CSV确定数据类型-Python

我是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**

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中,修改CSV文件中的数据类型通常需要读取CSV文件,然后对读取的数据进行类型转换,并将转换后的数据写回到一个新的CSV文件或覆盖原有文件。下面是一个简单的示例来说明如何修改CSV数据类型: 1. 使用`csv`模块读取CSV文件。 2. 解析每一行的数据,并根据需要将特定列的数据从一种类型转换为另一种类型。 3. 使用`csv`模块将修改后的数据写入新的CSV文件或覆盖原有文件。 这里以将字符串类型数据转换为整数类型为例: ```python import csv # 指定需要修改数据类型的列索引,假设我们想要转换第二列的数据类型 column_to_convert = 1 # 读取原始CSV文件 with open('original.csv', mode='r', encoding='utf-8') as file: csv_reader = csv.reader(file) # 创建一个csv.writer对象用于写入新的CSV文件 csv_writer = csv.writer(open('modified.csv', mode='w', encoding='utf-8', newline='')) # 遍历CSV文件中的每一行 for row in csv_reader: # 将指定列的数据转换为整数类型 try: row[column_to_convert] = int(row[column_to_convert]) except ValueError: # 如果转换失败(例如,数据不是整数),可以选择跳过该行或者保留原值 continue # 将转换后的行写入新的CSV文件 csv_writer.writerow(row) ``` 在这个过程中,我们需要注意几个关键点: - 数据类型转换错误处理:如果数据无法转换为指定的类型,需要处理这种情况(例如通过异常处理)。 - 文件操作:确保在读取和写入文件时正确处理文件编码和换行符。 - 性能考量:对于大型CSV文件,全部加载到内存可能不现实,可能需要考虑分块处理数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值