【问题标题】:python pandas read_csv thousands separator does not workpython pandas read_csv千位分隔符不起作用
【发布时间】:2017-07-06 16:36:54
【问题描述】:

我使用 pandas read_csv 来读取一个简单的 csv 文件。但是,它有ValueError: could not convert string to float:,我不明白为什么。

代码很简单

rawdata = pd.read_csv( r'Journal_input.csv' ,
                      dtype = { 'Base Amount' : 'float64' } , 
                      thousands = ',' ,
                      decimal = '.',
                      encoding = 'ISO-8859-1')

但我得到了这个错误

pandas\parser.pyx 在 pandas.parser.TextReader.read (pandas\parser.c:10415)()

pandas\parser.pyx 在 pandas.parser.TextReader._read_low_memory (pandas\parser.c:10691)()

pandas\parser.pyx 在 pandas.parser.TextReader._read_rows (pandas\parser.c:11728)()

pandas\parser.pyx 在 pandas.parser.TextReader._convert_column_data (pandas\parser.c:13162)()

pandas\parser.pyx 在 pandas.parser.TextReader._convert_tokens (pandas\parser.c:14487)()

ValueError:无法将字符串转换为浮点数:'79,026,695.50'

将“79,026,695.50”字符串转换为浮点数时怎么可能出错?我已经指定了这两个选项

thousands = ',' ,
decimal = '.',

是我的代码有问题还是 Pandas 中的错误?

【问题讨论】:

  • 你可以添加文件的内容来提问吗?或者更好地将文件上传到 gdocs、dropbox.. 如果数据不机密?
  • 您能否提供相关行的副本?

标签: python pandas type-conversion


【解决方案1】:

quoting 似乎有问题,因为如果分隔符是, 并且thousands 也是,,则必须在csv 中进行一些引用:

import pandas as pd
from pandas.compat import StringIO
import csv

temp=u"""'a','Base Amount'
'11','79,026,695.50'"""
#after testing replace 'StringIO(temp)' to 'filename.csv'
df = pd.read_csv(StringIO(temp), 
                 dtype = { 'Base Amount' : 'float64' },
                 thousands = ',' ,
                 quotechar = "'",
                 quoting = csv.QUOTE_ALL,
                 decimal = '.',
                 encoding = 'ISO-8859-1')

print (df)
    a  Base Amount
0  11   79026695.5

temp=u'''"a","Base Amount"
"11","79,026,695.50"'''
#after testing replace 'StringIO(temp)' to 'filename.csv'
df = pd.read_csv(StringIO(temp), 
                 dtype = { 'Base Amount' : 'float64' },
                 thousands = ',' ,
                 quotechar = '"',
                 quoting = csv.QUOTE_ALL,
                 decimal = '.',
                 encoding = 'ISO-8859-1')

print (df)
    a  Base Amount
0  11   79026695.5

【讨论】:

    猜你喜欢
    • 2017-06-25
    • 1970-01-01
    • 1970-01-01
    • 2017-10-25
    • 1970-01-01
    • 2016-09-01
    • 2022-07-31
    • 1970-01-01
    • 2015-09-20
    相关资源
    最近更新 更多