我修改了這篇文章中的一行,以有條件地從 csv 文件中讀取行:filename=r'C:\Users\Nutzer\Desktop\Projects\UK_Traffic_Data\test.csv'
df = (pd.read_csv(filename, error_bad_lines=False) [lambda x: x['Accident_Index'].str.startswith('2005')])這條線對于小型測試數(shù)據(jù)集來說效果非常好。但是,我確實有一個很大的 csv 文件需要讀取,并且讀取該文件需要很長時間。事實上,最終還是NotebookApp.iopub_data_rate_limit達(dá)到了。我的問題是:有沒有辦法改進(jìn)這段代碼及其性能?“Accident_Index”列中的記錄已排序。因此,如果達(dá)到“Accident_Index”不等于的值,則中斷讀取語句可能是一種解決方案str.startswith('2005')。您對如何做到這一點有什么建議嗎?這是一些示例數(shù)據(jù):所需的輸出應(yīng)該是包含前六條記錄的 pandas 數(shù)據(jù)框。
1 回答

慕尼黑的夜晚無繁華
TA貢獻(xiàn)1864條經(jīng)驗 獲得超6個贊
我們最初可以根據(jù)上述條件僅讀取我們想要過濾的特定列(假設(shè)這會顯著減少讀取開銷)。
#reading the mask column
df_indx = (pd.read_csv(filename, error_bad_lines=False,usecols=['Accident_Index'])
[lambda x: x['Accident_Index'].str.startswith('2005')])
然后,我們可以使用該列中的值,使用skiprows和nrows屬性從文件中讀取剩余的列,因為它們是輸入文件中的排序值
df_data= (pd.read_csv(filename,
error_bad_lines=False,header=0,skiprows=df_indx.index[0],nrows=df_indx.shape[0]))
df_data.columns=['Accident_index','data']
這將給出我們想要的數(shù)據(jù)的子集。我們可能不需要單獨獲取列名。
添加回答
舉報
0/150
提交
取消