2013-02-21 22 views
37

के लिए पहली कुछ पंक्तियों को पढ़ने का तरीका read_csv का उपयोग करने के लिए एक अंतर्निहित तरीका है, जो कि समय से पहले लाइनों की लंबाई को जानने के बिना फ़ाइल की पहली n पंक्तियों को पढ़ने के लिए है? मेरे पास एक बड़ी फाइल है जो पढ़ने के लिए काफी समय लेती है, और कभी-कभी केवल पहले का उपयोग करना चाहती है, कहें, 20 लाइनें इसका नमूना प्राप्त करने के लिए (और पूर्ण चीज़ लोड नहीं करना और इसके सिर को लेना पसंद करते हैं)।पांडा डेटाफ्रेम

यदि मुझे पता था कि लाइनों की कुल संख्या मैं footer_lines = total_lines - n जैसे कुछ कर सकता हूं और इसे skipfooter कीवर्ड तर्क में भेज सकता हूं। मेरे वर्तमान समाधान मैन्युअल पांडा को अजगर और यह StringIO के साथ पहली n लाइनों आकर्षित करने के लिए है:

import pandas as pd 
from StringIO import StringIO 

n = 20 
with open('big_file.csv', 'r') as f: 
    head = ''.join(f.readlines(n)) 

df = pd.read_csv(StringIO(head)) 

यह है कि बुरा नहीं है, लेकिन वहाँ एक और अधिक संक्षिप्त, 'pandasic' जिस तरह से खोजशब्दों के साथ यह करने के लिए है (?) या कुछ और?

+0

अंतिम _N_ लाइन चेकआउट [यह SO पोस्ट] लोड करने के तरीके को देखने के लिए (http://stackoverflow.com/questions/17108250/efficiently-read-last-n-rows-of-csv-into-dataframe) – zelusp

+0

क्या आपका मतलब "पांडस्टिक" था? :) –

उत्तर

69

मुझे लगता है कि आप nrows पैरामीटर का उपयोग कर सकते हैं। the docs से:

nrows : int, default None 

    Number of rows of file to read. Useful for reading pieces of large files 

जो काम करता है। मानक बड़े परीक्षण फ़ाइलों में से एक का उपयोग करना (988504479 बाइट्स, 5344499 पंक्तियां):

In [1]: import pandas as pd 

In [2]: time z = pd.read_csv("P00000001-ALL.csv", nrows=20) 
CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s 
Wall time: 0.00 s 

In [3]: len(z) 
Out[3]: 20 

In [4]: time z = pd.read_csv("P00000001-ALL.csv") 
CPU times: user 27.63 s, sys: 1.92 s, total: 29.55 s 
Wall time: 30.23 s 
+0

बहुत बढ़िया, उस पैरामीटर को याद किया होगा। धन्यवाद। – beardc

-2

यहाँ विकल्प

df = pd.read_csv("file.csv") 
df.head() 

यह एक csv खोलता है और पहले 5 पंक्तियों पढ़ता है।

+0

यह अभी भी पूरी फाइल को पढ़ेगा। ओपी ने ** ** केवल कुछ ही पंक्तियों को पढ़ने के लिए एक रास्ता मांगा। –

संबंधित मुद्दे