2017-08-02 70 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下。