python加载带引号字段的csv文件,其中逗号用作1000s分隔符

时间:2014-09-22 15:08:36

标签: python csv quotes comma separator

python中是否有一种简单的方法可以将包含下面列出的行的csv文件加载到数据帧中?

1.0, 2.0, 3.0, "123,456,789.999"
1000.0, 2000.0, 3000.0, "123,456,789.123"

显然,所有列的类型都应为数字(float64, int64, etc.)。此外,某些国家/地区使用(space)" "作为1000分隔符而不是comma。有没有办法指定?

1 个答案:

答案 0 :(得分:1)

pandas.io.parsers.read_table可以处理逗号分隔的数字,前提是您提供了一个处理逗号的converters参数:

  

converters:dict。用于转换值的函数的可选Dict   某些专栏。键可以是整数或列标签

以下是vanilla Python的解决方案:

import csv

def try_convert_number(s):
    val = s.replace(',', '')
    try:
        return int(val)
    except ValueError:
        try:
            return float(val)
        except ValueError:
            return s
result = []
# in Python 2 use: with open('file.csv', 'rb') as f:
with open('file.csv', newline='') as f:
    reader = csv.reader(f)
    if you_have_a_header_row:
        next(reader)
    for row in reader:
        result.append(map(try_convert_number, row))

另一种选择是创建一个缺少多余逗号的新csv文件:

def replace_commas(s):
    return s.replace(',', '')

with open('orig.csv', newline='') as fin, open('new.csv', newline='') as fout:
    reader = csv.reader(fin)
    writer = csv.writer(fout)
    for row in reader:
        writer.writerow(map(replace_commas, row))