从大的csv文件中阅读并将符合条件的行保存到另一个df中

6ojccjat  于 2023-07-31  发布在  其他
关注(0)|答案(1)|浏览(93)

我有一个大小为443,00 KB的大csv文件(数据集)。照片显示了文件的样本。我想将行保存到另一个数据框中。我试过这种方法,但它是这么多的时间e

import pandas as pd
df = pd.DataFrame()
for chunk in pd.read_csv("UsersVle.csv", chunksize=10):
    for i, row in chunk.iterrows():
        if((row['module']=='D3') & (row['presentation']=='13B')):
            df.append(row)

字符串
在寻找解决方案时,我发现了一些关于chuncksize的东西,并尝试了这种方法,但出现了错误TypeError:无法对dtyped [object]数组和[bool]类型的标量执行“兰德_”

import itertools as IT

chunksize = 10 ** 3
chunks = pd.read_csv('UsersVle.csv', chunksize=chunksize)
chunks = IT.takewhile(lambda chunk: (chunk['module']=='D3' & chunk['presentation']=='13B'), chunks)
df = pd.concat(chunks)


我需要一种有效的方法来读取这个大文件,并将满足条件的行保存到另一个 Dataframe 中。我将感激你的帮助。PS,我尝试dask,但似乎没有读取文件,因为我使用df.head(),没有返回行!.

ycl3bljg

ycl3bljg1#

不是很科学,但一些得到一个想法,以调整价值:
使用moviedataset/rating.csv

print('Without chunksize')
start = timer()
df = pd.read_csv('ml-latest/ratings.csv')
df2 = df[df["rating"] == 5.0]
print(timer() - start)

for cs in range(4, 10):
    print('Chunk size', cs, 10 ** cs)
    start = timer()
    rdr= pd.read_csv('ml-latest/ratings.csv', chunksize=10**cs)
    df2 = pd.concat([chunk[chunk['rating'] == 5.0] for chunk in rdr])
    print(timer() - start)

字符串
输出量:

Without chunksize
5.055990324995946
Chunk size 4 10000
8.80516574899957
Chunk size 5 100000
5.21452364900324
Chunk size 6 1000000
4.814042658996186
Chunk size 7 10000000
4.8958623920043465
Chunk size 8 100000000
5.152557591005461
Chunk size 9 1000000000
5.076704847000656

相关问题