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
。有没有办法指定?
答案 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))