我正在嘗試從 5GB 的大檔案中讀取一些特定的 ID。對于下面的 Ex 是具有列的示例檔案['ID','Fruit Name']
ID Fruit Name
'234' Orange
'789' Grapes
'567' Fig
'412' Carrot
'589' Apple
'609' Pomegranate
'778' Mango
'889' Date
'999' Banana
'101' Strawberry
嘗試通過下面的代碼從上面的檔案中讀取一些特定的 ID。它將第一個完整檔案放入記憶體,然后執行特定 ID 的提取資料。能否以另一種方式完成此程序,以便在不加載整個檔案的情況下僅提取特定的 ID 資料。
df=pd.read_csv("fruit.csv")
df=df[df.isin(['101','567']).any(1).values]
請建議在 python 中使用 pandas 或背景關系管理器執行上述用例的想法。
uj5u.com熱心網友回復:
您可以將檔案視為文本檔案并逐行讀取,而無需將它們加載到記憶體中。如果任何行與條件匹配,則將其附加到資料框
with open('fruit.csv', 'r', encoding='utf-8') as f:
df = pd.DataFrame(columns=next(f).strip().split(','))
for line in f:
values = line.strip().split(',')
if values[0] in ["'101'", "'567'"]:
df.loc[len(df)] = values
print(df)
輸出
ID Fruit Name
0 '567' Fig
1 '101' Strawberry
uj5u.com熱心網友回復:
DataFrame 和“查詢”功能用于快速操作。
資料轉換為 DataFrame 并使用“查詢”:
df = pd.read_csv("fruit.csv")
df = pd.DataFrame(df)
df.query('ID >101 and ID < 567')
print(df)
uj5u.com熱心網友回復:
一種類似于@Guy 的方法,但使用DataFrame 建構式來避免重復loc賦值:
with open('fruits.csv') as f:
cols = next(f).strip().split(',')
S = {'101', '567'}
df = pd.DataFrame([l for x in f
if (l:=x.rstrip().split(','))[0] in S],
columns=cols
)
print(df)
輸出:
ID Fruit Name
0 567 Fig
1 101 Strawberry
使用的輸入csv:
ID,Fruit Name
234,Orange
789,Grapes
567,Fig
412,Carrot
589,Apple
609,Pomegranate
778,Mango
889,Date
999,Banana
101,Strawberry
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/505646.html
上一篇:為什么strcmp函式在c程式中沒有給出正確的比較結果
下一篇:如何從不同位置的文本檔案中洗掉值
