pandas read_csv 修复列以读取数据中带有换行符的数据

Posted

技术标签:

【中文标题】pandas read_csv 修复列以读取数据中带有换行符的数据【英文标题】:pandas read_csv fix columns to read data with newline characters in data 【发布时间】: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?? 【参考方案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 下适合您的操作函数。

【讨论】:

以上是关于pandas read_csv 修复列以读取数据中带有换行符的数据的主要内容,如果未能解决你的问题,请参考以下文章

pandas使用read_csv函数读取文件最后N行数据并保留表头pandas使用read_csv函数读取网络url链接数据

pandas使用read_csv读取数据使用index_col参数移除Unnamed:0数据列pandas使用read_csv读取压缩格式文件

pandas使用read_csv函数读取文件并解析日期数据列(parse dates)pandas使用read_csv函数读取文件并将缺失值转化为空字符串

详解pandas的read_csv()

python pandas 中文件的读写——read_csv()读取文件

pandas使用read_csv函数读取文件时指定数据列的数据类型pandas使用read_csv函数读取文件时通过keep_default_na参数设置缺失值替换为空字符串