2017-08-02 69 views
2

使用熊猫换行字符的数据在很大程度上制表符分隔的文件中读取大熊猫read_csv修复列读取数据

df = pd.read_csv(file_path, sep='\t', encoding='latin 1', dtype = str, keep_default_na=False, na_values='') 

的问题是,有200列和第三列是文本,偶尔换行符。文本不以任何特殊字符分隔。这些行被切成多行,数据进入错误的列。

每行都有固定数量的选项卡 - 这就是我所要做的。

+0

我不认为你可以单独做熊猫。但是,您可以预处理文件,并将所有换行符替换为其他可接受的字符,除非它们发生在每行中的N个选项卡之后。 – DyZ

+0

当线被切断时,剩余列中的值是否为NaN? –

回答

2

这个想法是使用正则表达式来查找由给定数量的选项卡分隔并以换行符结尾的东西的所有实例。然后采取所有这一切,并创建一个数据框。

import pandas as pd 
import re 

def wonky_parser(fn): 
    txt = open(fn).read() 
    #       This is where I specified 8 tabs 
    #          V 
    preparse = re.findall('(([^\t]*\t[^\t]*){8}(\n|\Z))', txt) 
    parsed = [t[0].split('\t') for t in preparse] 
    return pd.DataFrame(parsed) 

传递一个文件名功能,让你的数据框回来。

0

名的第三列

df.columns.values[2] = "some_name" 

和使用转换器来传递你的函数。

pd.read_csv("foo.csv", sep='\t', encoding='latin 1', dtype = str, keep_default_na=False, converters={'some_name':lambda x:x.replace('/n','')}) 

你可以使用任何操作函数,它适用于你在lambda下。