我修改了這篇文章中的一行,以有條件地從 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')])這條線對于小型測試數據集來說效果非常好。但是,我確實有一個很大的 csv 文件需要讀取,并且讀取該文件需要很長時間。事實上,最終還是NotebookApp.iopub_data_rate_limit達到了。我的問題是:有沒有辦法改進這段代碼及其性能?“Accident_Index”列中的記錄已排序。因此,如果達到“Accident_Index”不等于的值,則中斷讀取語句可能是一種解決方案str.startswith('2005')。您對如何做到這一點有什么建議嗎?這是一些示例數據:所需的輸出應該是包含前六條記錄的 pandas 數據框。
1 回答

慕尼黑的夜晚無繁華
TA貢獻1864條經驗 獲得超6個贊
我們最初可以根據上述條件僅讀取我們想要過濾的特定列(假設這會顯著減少讀取開銷)。
#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']
這將給出我們想要的數據的子集。我們可能不需要單獨獲取列名。
添加回答
舉報
0/150
提交
取消