如何从Python中的混合CSV文件中读取int数据

时间:2019-07-03 06:36:46

标签: python string csv parsing int

我有一个混合的CSV文件,开始时有两列包含字符串数据,在大约100行之后,该文件在两列以上具有浮点值。问题是当我使用csv.reader读取文件时,它将所有数据读取为字符串,并且无法对浮点数据进行任何操作。最后,我将删除字符串数据,因为CSV文件将被传输到DB。 关于如何做到这一点的任何想法?

文件外观示例:

aaa,bbb
aa,bbbb
aaa,dddd
eee,rrr
...
12.2,15.345,13.566,14.66,100.5
13,545,245.452,-0.422

2 个答案:

答案 0 :(得分:1)

如果您知道如何丢弃100行:

with open(filename, 'rt') as r:
    for i in range(100):
        next(r)
    for row in csv.reader(r, delimiter=',', quoting=csv.QUOTE_NONNUMERIC):
        ...

如果您事先不知道:

with open(filename, 'rt') as r:
    z = itertools.dropwhile(lambda line: line.count(',') == 1 or line.count('"') > 0, r)
    for row in csv.reader(z, delimiter=',',  quoting=csv.QUOTE_NONNUMERIC):
        ...

代码未经测试,但要旨应明确:在r上进行迭代,直到消耗掉不需要的内容为止,然后将文件对象传递给csv.reader

答案 1 :(得分:1)

通过pandas,您可以使用skiprows参数从csv顶部跳过行。假设前4行具有字符串类型的行,则可以指定skiprows=4。操作方法如下:

In [1]: import pandas as pd

In [2]: test_string = """aaa,bbb
   ...: aa,bbbb
   ...: aaa,dddd
   ...: eee,rrr
   ...: num1,num2,num3,num4,num5
   ...: 12.2,15.345,13.566,14.66,100.5
   ...: 13,545,245.452,-0.422"""

In [3]: with open("test.csv", 'w') as f:
   ...:     f.write(test_string)
   ...:

In [4]: df = pd.read_csv("test.csv", skiprows=4)

In [5]: df.head()
Out[5]:
   num1     num2     num3    num4   num5
0  12.2   15.345   13.566  14.660  100.5
1  13.0  545.000  245.452  -0.422    NaN