pandas read_csv修复列以使用数据中的换行符读取数据

时间:2017-08-02 06:32:02

标签: python regex pandas

使用pandas读取大型制表符分隔文件

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

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

每一行都有固定数量的标签 - 这就是我必须要做的全部。

2 个答案:

答案 0 :(得分:3)

这个想法是使用正则表达式来查找由给定数量的选项卡分隔并以换行符结尾的所有事物实例。然后拿走所有这些并创建一个数据帧。

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)

将文件名传递给函数并重新获取数据帧。

答案 1 :(得分: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的操作函数。