【问题标题】:pandas read_csv fix columns to read data with newline characters in datapandas read_csv 修复列以读取数据中带有换行符的数据
【发布时间】:2018-01-09 05:19:42
【问题描述】:

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

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

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

每行都有固定数量的选项卡 - 这就是我必须继续进行的全部内容。

【问题讨论】:

  • 我认为你不能单独在 Pandas 中做到这一点。但是您可以预处理文件并将所有换行符替换为其他可接受的字符,除非它们发生在每行中的 N 个制表符之后。
  • 当行被截断时,剩余列中的值是否得到NaN??

标签: python regex pandas


【解决方案1】:

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

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)

将文件名传递给函数并取回您的数据框。

【讨论】:

    【解决方案2】:

    命名你的第三列

    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 下适合您的操作函数。

    【讨论】:

      猜你喜欢
      • 2017-01-31
      • 1970-01-01
      • 2015-09-03
      • 2016-10-04
      • 1970-01-01
      • 1970-01-01
      • 2014-11-17
      • 1970-01-01
      相关资源
      最近更新 更多