在块中加载数据时,Pandas None类型

时间:2018-09-20 11:49:45

标签: python python-3.x pandas

问候数据科学家。

我已经编写了此函数来分块加载数据,它可以正常工作,并且可以给我数据的形状,但是当我尝试将其分配给变量时,便可以清理数据并进行处理它表明它是无类型

def show(df):
start = time()

c=0
for chuck in pd.read_csv('../input/{}.csv'.format(df), chunksize=50000):
    if c==0:
        df=chuck
        c+=1
    else:
        df=df.append(chuck, ignore_index=True)
        c+=1
print (c)

print('used {:.2f} s'.format(time()-start))

print(df.shape)
df.head()

我的数据最初有307511行和212列。我还有其他数据集需要加载数百万行。我的RAM无法处理此数据量,因此我需要对此进行协助

我也尝试过这种加载数据的方式,但是我无法获取全部数据,但只能获取其中的一部分。我要在合并和拟合数据时使用我的所有数据

df = pd.read_csv('../input/application_train.csv', iterator=True, chunksize=10**6, engine='python')

这行得通,但我不能从中获取所有数据

df = df.get_chunk(300000)

2 个答案:

答案 0 :(得分:2)

您是否要完全按照问题中的代码运行代码?

如果是这样,就会想到一些问题:

  • 缩进:如果要使其成为函数的一部分,则应缩进“ def ...”之后的每一行。

  • df中的多个值:首先将其作为文件名,但随后在循环的中间更改其值,以便返回循环顶部时会有所不同。 / p>

  • 将df用作多种类型的值。一次创建一个空列表并将其迭代添加,似乎可以更好地满足您的目的。

尝试这样的事情:

def show(file_name):
    start = time()

    c=0
    df = []
    for chuck in pd.read_csv('../input/{}.csv'.format(file_name), chunksize=50000):
        df.append(chuck, ignore_index=True)
        c+=1
    print (c)

    print('used {:.2f} s'.format(time()-start))

    print(df.shape)
    df.head()

答案 1 :(得分:2)

两个代码对我来说都很好。我曾经遇到过同样的问题。尽量不要将代码放在函数中,看看它是如何工作的,for循环本身可以正常工作。试试这个

start = time()
data = []
for chunk in pd.read_csv('../input/youdataset.csv', chunksize = 50000):
    data.append(chunk)

print(len(data))

df  = pd.concat(data, ignore_index = True)

print('used {:.2f}s'.format(time()-start))
print(df.shape)
df.head()

我希望这对您有帮助