Python 在pandas read_csv函数中使用不可拆分的空格作为千位分隔符
我有一个iso-8859-1格式的csv文件要导入到数据帧 read_csv函数非常适合于此 但是csv使用不可破坏的空间作为分隔符,我似乎无法删除它 在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(
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'时,它就像一个符咒一样工作:-)谢谢你的提示!