【问题标题】:Pandas read_table() missing linesPandas read_table() 缺少行
【发布时间】:2017-02-08 04:33:03
【问题描述】:

Pandas read_table 函数在我试图读取的文件中缺少一些行,但我无法找出原因。

import pandas as pd
import numpy as np
filename = "whatever.txt"

df_pd = pd.read_table(filename, use_cols=['FirstColumn'], skip_blank_lines=False)
df_np = np.genfromtxt(filename, usecols=0)

#function to count file line by line
def file_len(fname):
    with open(fname) as f:
        for i, l in enumerate(f):
            pass
    return i + 1

len_pd = len(df_pd)
len_np = len(df_np)
len_linebyline = file_len(filename)

很遗憾,我无法分享我的实际数据,因为它是一个巨大的文件,除了受许可保护外,还有 30 列 x 5800 万行。出于某种原因,numpy 和 file_len 方法给出了大约 5800 万行的正确长度,但 pandas 方法只有大约 5500 万行。

是否有人对可能导致此问题的原因或我如何进行调查有任何想法?

【问题讨论】:

  • 请提供一个可重复的样本(使用假数据)数据集——3-5行就足够了...请阅读how to make good reproducible pandas examples
  • @MaxU 我在这个例子中提到的第一列只是用作 ID 的整数。我不知道如何提供可重现的样本,因为看起来大部分数据都很好,但是中间某处有一大块导致问题,但我不知道那块有什么不同或者它在哪里。感谢您转介到其他问题
  • 有人猜测你的问题看不到可重现数据集的概率非常低......所以你必须分析问题,找出 Pandas 端缺少哪些数据,然后之后,您要么知道原因,要么能够提供可重现的数据集。只是我的 0.02 美元
  • @MaxU 感谢您的建议。我想我只是很沮丧,因为我不知道如何重现这个问题,如果可以的话,我很可能能够自己解决这个问题。我知道这个问题很难回答

标签: python pandas numpy


【解决方案1】:

使用以下方法可以尝试查找缺失的数据:

In [31]: df = pd.DataFrame({'col':[0,1,2,3,4,6,7,8]})

In [32]: a = np.arange(10)

In [33]: df
Out[33]:
   col
0    0
1    1
2    2
3    3
4    4
5    6
6    7
7    8

In [34]: a
Out[34]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

In [35]: np.setdiff1d(a, df.col)
Out[35]: array([5, 9])

【讨论】:

    猜你喜欢
    • 2012-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-31
    • 1970-01-01
    • 2017-09-11
    • 2017-12-08
    • 1970-01-01
    相关资源
    最近更新 更多