Python 确定数据类型并对int和float列执行数学运算

Python 确定数据类型并对int和float列执行数学运算,python,csv,Python,Csv,我有一个很大的csv文件,里面有浮点数、整数和字符串,仅使用csv模块,我需要确定数据类型,然后对包含数字的列执行模式、平均值等计算。到目前为止,我有: import csv file = open('adult.csv') reader = csv.reader(file) filename = 'output.xml' text = open(filename, 'w') text.write('<?xml version="1.0"?>') text.write('<!

我有一个很大的csv文件,里面有浮点数、整数和字符串,仅使用csv模块,我需要确定数据类型,然后对包含数字的列执行模式、平均值等计算。到目前为止,我有:

import csv

file = open('adult.csv')
reader = csv.reader(file)
filename = 'output.xml'
text = open(filename, 'w')
text.write('<?xml version="1.0"?>')
text.write('<!DOCTYPE summary [')


def getType2(value):
    try:
        float(value)
        if "." in value:
            print 'float',
            return 'float'

        else:
            print 'int',
            return 'int'

    except ValueError:
        print 'str',


headers = reader.next()
length= len(headers)
print length
i=0
while i<length:

    print '<name>',
    print headers[i],
    print '</name>'
    print '<type>',
    value = reader.next()
    if getType2(value[i]) == 'int':
        data =[]
        total =0
        for row in reader:
            data.append(float(row[i]))
            total += int(row[i])
            print total


    print '</type>\n\n'
    print
    i= i+1

print '<!ELEMENT summary\n\n>'
导入csv
文件=打开('成人.csv')
reader=csv.reader(文件)
文件名='output.xml'
text=打开(文件名“w”)
text.write(“”)

text.write(“它只对第一列起作用的原因是您对csv reader对象的迭代方式:

您有一个
while
循环,打算在列上进行迭代,但在该循环中,就在
if
-子句之前,您每次都要调用
reader.next()
,它将返回文件中的下一行。这意味着,如果没有在
if
-子句中发生的操作,您将只检查此csv文件对角线上的元素。在
if
-子句中,您将迭代文件中的所有行,读卡器对象是一个迭代器,这意味着一旦你获得了一个元素(例如一条线),就没有办法再获得它(如果你已经看过第2行,你就不能跳回第1行)

您当前的方法确实有些复杂。如果您想处理整个文件,并对所有列进行操作,您必须将整个文件加载到内存中,并为此生成有效的数据结构

如果您正在处理的数据文件是一个性能良好的csv文件,则最好使用它,它将返回一个numpy对象,该对象具有
mean
等方法。它用于数值计算。您还可以查看,它提供了类似的功能。使用这些库将阻止您重新创建轮子


一旦将数据集加载到pandas dataframe或numpy数组中,您就可以轻松地完成其余的数字处理,并继续将所需的值写入输出文件。链接底部有一些关于如何使用
np.genfromtxt
的示例,这将有助于您入门。

谢谢,这是一个很好的例子这很有道理,不幸的是,对于一个学校项目来说,不能使用numpy或熊猫,但你刚才所说的帮助很大,谢谢!!