从熊猫列中删除unicode'\ xa0'

时间:2019-03-31 15:57:16

标签: python-3.x string pandas encoding

我得到了一个latin-1 .txt数据集,我正在尝试清理该数据集以用于使用python 3和pandas进行适当的分析。从html抓取的数据集包含多个\ xa0出现,我似乎无法使用解码,剥离,-u替换或我在堆栈溢出时发现的任何其他方法来处理。我所有的尝试似乎都被python所忽略,仍然打印出相同的结果。当我刚接触数据时,很可能错过了一些显而易见的事情,但是现在我看不到前进的方向

我试图解码为ascii,剥离为str,然后替换,或者使用-u子句替换,而不导致任何结果

filepath = 'meow3.txt'  
outF = open("myOutFile.txt", "a")
with open(filepath) as fp:  
    line = fp.readline()
    for line in fp:
        if line.strip().startswith(','):
            line = line.replace(',','',1)
        line = line.replace(u'\xa0', u' ')
        print(line)

df = pd.read_csv('myOutFile.txt', sep=",", encoding="latin-1", header=None, names=["Company name", "Total", "Invested since-to"])

print (df)
3sun Group, £10m ,Feb 2014 
,Abacus, £4.15m ,Aug 2013 
,Accsys Group ,£12m, Mar 2017, 
Acro ,\xa0£7.8m, Nov 2015 – Sep 2017, 
ACS Clothing, £25.3m ,Jan 2014 

这是数据集的外观,以及为什么在我的代码中我删除了第一个逗号(如果它在列的开头)。但是我尝试过的所有建议答案似乎都无法帮助删除数据集的\ xa0部分,仍然给出相同的结果(如上所示)。如果有人对我如何进行这项工作有任何线索,我将不胜感激, 干杯, 耶利哥

编辑:虽然我知道最好将其转换为txt文件之前进行预处理,但是我无法访问或控制该过程,因此我必须处理获得的数据。

3 个答案:

答案 0 :(得分:2)

我今天突然被这个问题困扰,终于找到了最快,最整洁的解决方案。 假设您的熊猫数据框具有一列,其值类似于'South \ xa0Carolina'。

使用以下代码删除所有的'\ xa0'。其实我已经尝试过.replace(“ \ xa0”,“”)和.replace(r'\ xa0',r''),但是它们都不起作用。

data['col'].str.split().str.join(' ')

答案 1 :(得分:0)

也许解码到UTF8的行会有所帮助

line = line.decode('UTF-8') 

然后在必要时进行字符串替换。

答案 2 :(得分:0)

在阅读文件后执行此操作。

df['col'] = df['col'].apply(lambda x: str(x).replace(u'\xa0', u''))