Python 在pandas read_csv函数中使用不可拆分的空格作为千位分隔符

Python 在pandas read_csv函数中使用不可拆分的空格作为千位分隔符,python,pandas,Python,Pandas,我有一个iso-8859-1格式的csv文件要导入到数据帧 read_csv函数非常适合于此 但是csv使用不可破坏的空间作为分隔符,我似乎无法删除它 在read_csv函数中有一个数千属性,但无论我在其中添加了什么,牢不可破的空格仍然存在 我尝试了以下方法,结果都是一样的: data_sheet = pd.read_csv(path_to_csv, encoding="iso-8859-1", thousands=' ') data_sheet = pd.read_csv(

我有一个iso-8859-1格式的csv文件要导入到数据帧

read_csv函数非常适合于此

但是csv使用不可破坏的空间作为分隔符,我似乎无法删除它

在read_csv函数中有一个数千属性,但无论我在其中添加了什么,牢不可破的空格仍然存在

我尝试了以下方法,结果都是一样的:

data_sheet = pd.read_csv(path_to_csv, encoding="iso-8859-1", thousands=' ')
data_sheet = pd.read_csv(path_to_csv, encoding="iso-8859-1", thousands=chr(160'))
data_sheet = pd.read_csv(path_to_csv, encoding="iso-8859-1", thousands=u'\xa0')
data_sheet = pd.read_csv(path_to_csv, encoding="iso-8859-1", thousands='\xa0')
data_sheet = pd.read_csv(path_to_csv, encoding="iso-8859-1", thousands=unicodedata.lookup('NO-BREAK SPACE'))

因为它不能解析它,熊猫认为它是一个字符串,当我试图转换它时,它会返回下面的错误:

ValueError: could not convert string to float: '1\xa0279,92'

我也无法让
数千=…
工作,即使是使用
decimal='、'
dtype=…
抛出

对我来说有用的是提供了一个
转换器

希望其他对熊猫有更多经验的人能告诉我们如何正确使用数千只

import pandas as pd
import io


def to_float(s):
    return float(s.replace('\xa0', '').replace(',', '.'))


data = '''\
a,b,c
foo,bar,"1\xa0279,92"
foo,bar,"2\xa0280,93"
foo,bar,"3\xa0281,94"
foo,bar,"4\xa0282,95"
'''

f = io.StringIO(data)
df = pd.read_csv(f, converters={'c': to_float})

print(df)


我也无法让
数千=…
工作,即使是使用
decimal='、'
dtype=…
抛出

对我来说有用的是提供了一个
转换器

希望其他对熊猫有更多经验的人能告诉我们如何正确使用数千只

import pandas as pd
import io


def to_float(s):
    return float(s.replace('\xa0', '').replace(',', '.'))


data = '''\
a,b,c
foo,bar,"1\xa0279,92"
foo,bar,"2\xa0280,93"
foo,bar,"3\xa0281,94"
foo,bar,"4\xa0282,95"
'''

f = io.StringIO(data)
df = pd.read_csv(f, converters={'c': to_float})

print(df)


pd.read\u csv
支持两个解析器引擎:C和Python。据报道,

我做了一些测试,它看起来像C引擎——在大多数情况下是默认选择——只能处理基本ASCII字母的千位和十进制分隔符(
'\x0'
-
'\x7f'
);只有Python引擎才支持使用
'\xa0'
作为千位分隔符

data = "0,11;1\xa0279,92;1\xa0324,21;1\xa0302,14;10,65;2\xa0707,77;2\xa0951,71;2\xa0829,40"
df = pd.read_csv(io.StringIO(data), header=None, encoding="iso-8859-1",
                 sep=';', decimal=',', thousands='\xa0', engine="python")
df.info()
输出:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1 entries, 0 to 0
Data columns (total 8 columns):
 #   Column  Non-Null Count  Dtype  
---  ------  --------------  -----  
 0   0       1 non-null      float64
 1   1       1 non-null      float64
 2   2       1 non-null      float64
 3   3       1 non-null      float64
 4   4       1 non-null      float64
 5   5       1 non-null      float64
 6   6       1 non-null      float64
 7   7       1 non-null      float64
dtypes: float64(8)
memory usage: 192.0 bytes

范围索引:1个条目,0到0
数据列(共8列):
#列非空计数数据类型
---  ------  --------------  -----  
0 1非空浮点64
1非空浮点64
2 1非空浮点64
3 1非空浮点64
4 1非空浮点64
5 1非空浮点64
6 1非空浮点64
7 1非空浮点64
数据类型:float64(8)
内存使用:192.0字节

pd.read\u csv支持两个解析器引擎:C和Python。据报道,

我做了一些测试,它看起来像C引擎——在大多数情况下是默认选择——只能处理基本ASCII字母的千位和十进制分隔符(
'\x0'
-
'\x7f'
);只有Python引擎才支持使用
'\xa0'
作为千位分隔符

data = "0,11;1\xa0279,92;1\xa0324,21;1\xa0302,14;10,65;2\xa0707,77;2\xa0951,71;2\xa0829,40"
df = pd.read_csv(io.StringIO(data), header=None, encoding="iso-8859-1",
                 sep=';', decimal=',', thousands='\xa0', engine="python")
df.info()
输出:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1 entries, 0 to 0
Data columns (total 8 columns):
 #   Column  Non-Null Count  Dtype  
---  ------  --------------  -----  
 0   0       1 non-null      float64
 1   1       1 non-null      float64
 2   2       1 non-null      float64
 3   3       1 non-null      float64
 4   4       1 non-null      float64
 5   5       1 non-null      float64
 6   6       1 non-null      float64
 7   7       1 non-null      float64
dtypes: float64(8)
memory usage: 192.0 bytes

范围索引:1个条目,0到0
数据列(共8列):
#列非空计数数据类型
---  ------  --------------  -----  
0 1非空浮点64
1非空浮点64
2 1非空浮点64
3 1非空浮点64
4 1非空浮点64
5 1非空浮点64
6 1非空浮点64
7 1非空浮点64
数据类型:float64(8)
内存使用:192.0字节

能否显示包含
'1\xa0279,92'
的原始数据行?
'1\xa0279,92'
中的逗号是CSV文件的小数点还是逗号分隔符?小数点是',字段分隔符是';'。为了清晰起见,我从帖子中删除了这些参数。完整命令如下。data_sheet=pd.read_csv(临时文件,头=25,encoding=“iso-8859-1”,sep=”;”,decimal=”,“,milk=”)下面是一个完整行的示例。有175列,所以太长了,但这里有一部分有问题的字段:0,11;1 279,92;1 324,21;1 302,14;10,65;2 707,77;2 951,71;282940好。您可以编辑您的帖子以包含信息。您能显示包含
'1\xa0279,92'
的原始数据行吗?
'1\xa0279,92'
中的逗号是CSV文件的小数点还是逗号分隔符?小数点是',字段分隔符是';'。为了清晰起见,我从帖子中删除了这些参数。完整命令如下。data_sheet=pd.read_csv(临时文件,头=25,encoding=“iso-8859-1”,sep=”;”,decimal=”,“,milk=”)下面是一个完整行的示例。有175列,所以太长了,但这里有一部分有问题的字段:0,11;1 279,92;1 324,21;1 302,14;10,65;2 707,77;2 951,71;282940好。您可以编辑您的帖子以包含信息。我最后做的是首先使用标准的python open()命令将文件作为txtfile打开,然后删除所有不可破坏的空间,然后将其另存为新文件,最后使用pandas导入。这很管用,但你的方式要优雅得多。谢谢:-)我最后做的是首先使用标准的python open()命令将文件作为txtfile打开,然后删除所有不可破坏的空间,然后将其保存为新文件,最后使用pandas导入。这很管用,但你的方式要优雅得多。谢谢:-)当添加engine='python'时,它就像一个符咒一样工作:-)谢谢你的提示!当添加engine='python'时,它就像一个符咒一样工作:-)谢谢你的提示!