Ich las eine super große CSV-Datei (10G) mit Pandas, und read_csv (Dateiname, Chunksize = Chunksize) gib mir einen Iterator (Assum nennt es "Leser"). Und jetzt möchte ich einen genauen Chunk bekommen, weil ich nur ein paar Zeilen möchte (zum Beispiel hat die CSV-Datei, die ich gelesen habe, 1000000000 Zeilen, und ich möchte 50000000 Zeilen und 1000 Zeilen danach bekommen), was soll ich tun außer den Iterator zu tranversieren, bis er den gewünschten Chunk erreicht?Wie bekomme ich einen genauen Python-Iterator?
Hier ist mein ehemaliger Code:
def get_lines_by_chunk(file_name, line_beg, line_end, chunk_size=-1):
func_name = 'get_lines_by_chunk'
line_no = get_file_line_no(file_name)
if chunk_size < 0:
chunk_size = get_chunk_size(line_no, line_beg, line_end)
reader = pd.read_csv(file_name, chunksize=chunk_size)
data = pd.DataFrame({})
flag = 0
for chunk in reader:
line_before = flag * chunk_size
flag = flag + 1
line_after = flag * chunk_size
if line_beg >= line_before and line_beg <= line_after:
if line_end >= line_after:
temp = chunk[line_beg - line_before : chunk_size]
data = pd.concat([data, temp], ignore_index=True)
else:
temp = chunk[line_beg - line_before : line_end - line_before]
data = pd.concat([data, temp], ignore_index=True)
return data
elif line_end <= line_after and line_end >= line_before:
temp = chunk[0 : line_end - line_before]
data = pd.concat([data, temp], ignore_index=True)
return data
elif line_beg < line_before and line_end > line_after:
temp = chunk[0 : chunk_size]
data = pd.concat([data, temp], ignore_index=True)
return data
kann nicht einfach tun 'df = pd.read_csv (file_name, skiprows = 50000000, nrows = 1000)'? – EdChum
oh ... es scheint funktioniert, ich bin neu in pandas .. – flyingrose
Der Titel * "Wie bekomme ich einen genauen Python Iterator? *" Macht keinen Sinn für mich. Kannst du es umschreiben? – smci