這裏是熊貓的新功能。 我有一個叫做all_invoice的熊貓DataFrame,只有一列叫做'whole_line'。使用read_fwf函數調用熊貓系列函數
all_invoice中的每一行都是固定寬度的字符串。我需要從all_invoice使用read_fwf
一個新的DataFrame。 我有一個看起來像這樣一個有效的解決方案:
invoice = pd.DataFrame()
for i,r in all_invoice['whole_line'].iteritems():
temp_df = pd.read_fwf(StringIO(r), colspecs=in_specs,
names=in_cols, converters=in_convert)
invoice = invoice.append(temp_df, ignore_index = True)
in_specs
,in_cols
和in_convert
已經在我的腳本前面定義。
所以這個解決方案的工作,但是非常緩慢。對於具有85列的18K行,這部分代碼需要大約6分鐘才能執行。我希望有一個更優雅的解決方案,它不涉及遍歷DataFrame或Series中的行,並使用apply函數調用read_fwf
以使其更快。所以,我想:
invoice = all_invoice['whole_line'].apply(pd.read_fwf, colspecs=in_specs,names=in_cols, converters=in_convert)
我回溯的尾部看起來像:
OSError: [Errno 36] File name too long:
此之後冒號是傳遞給read_fwf
方法的字符串。我懷疑這是因爲read_fwf
需要一個文件路徑或緩衝區。在我的工作(但很慢)的代碼中,我可以調用字符串上的StringIO()來使其成爲一個緩衝區,但我不能用apply函數來實現。讚賞任何幫助獲得應用工作或其他方式使用整個系列/ df上的read_fwf
以避免迭代行,這是值得讚賞的。謝謝。
你能不能此列保存到一個文件,然後使用一個'read_fwf'調用一次閱讀完所有的行? – gereleth
我寧願不要在read_fwf之前將文件寫回磁盤。感謝您的建議。 – okyere