python pandas read_csv千位分隔符不起作用

时间:2017-02-17 08:35:14

标签: python pandas type-conversion

我使用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.TextReader.read中的pandas \ parser.pyx   (熊猫\ parser.c:10415)()

     pandas.parser.TextReader._read_low_memory中的

pandas \ parser.pyx   (熊猫\ parser.c:10691)()

     pandas.parser.TextReader._read_rows中的

pandas \ parser.pyx   (熊猫\ parser.c:11728)()

     

pandas.parser.TextReader._convert_column_data中的pandas \ parser.pyx   (熊猫\ parser.c:13162)()

     

pandas.parser.TextReader._convert_tokens中的pandas \ parser.pyx   (熊猫\ parser.c:14487)()

     

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

转换字符串' 79,026,695.50'时怎么可能出错?漂浮?我已经指定了两个选项

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

我的代码或熊猫中的错误是否有问题?

1 个答案:

答案 0 :(得分:2)

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