2017-06-02 40 views
1

後,我在大熊貓解析多字符分隔符CSV格式如下大熊貓無效轉義序列更新

big_df = pd.read_csv(os.path.expanduser('~/path/to/csv/with/special/delimiters.csv'), 
        encoding='utf8', 
        sep='\$\$><\$\$', 
        decimal=',', 
        engine='python') 
big_df.iloc[:, -1] = big_df.iloc[:, -1].str.replace('\$\$>$', '') 
big_df = big_df.replace(['^<', '>$'], ['', ''], regex=True) 

big_df.columns = big_df.columns.to_series().replace(['^<', '>$', '>\$\$'], ['', '', ''], regex=True) 

這個工作得很好,直到我最近升級我的熊貓安裝。現在我看到很多廢棄警告的:

<input>:3: DeprecationWarning: invalid escape sequence \$ 
<input>:3: DeprecationWarning: invalid escape sequence \$ 
<input>:3: DeprecationWarning: invalid escape sequence \$ 
<input>:3: DeprecationWarning: invalid escape sequence \$ 
<input>:3: DeprecationWarning: invalid escape sequence \$ 
<ipython-input-6-1ba5b58b9e9e>:3: DeprecationWarning: invalid escape sequence \$ 
    sep='\$\$><\$\$', 
<ipython-input-6-1ba5b58b9e9e>:7: DeprecationWarning: invalid escape sequence \$ 
    big_df.iloc[:, -1] = big_df.iloc[:, -1].str.replace('\$\$>$', '') 

,因爲我需要與$符號,我不能確定如何妥善處理這些警告

+0

使用原始字符串:'R '\ $ \ $><\ $ \ $''等這樣的字符串逃逸,逃逸的正則表達式不干擾。 –

+0

謝謝,這已經是答案。如果你想隨時發佈它作爲答案。 –

+0

謝謝。我會拒絕,但這種貶低似乎是一個非常新的東西,我主要發現github問題的圖書館,如jinja,scikit,sympy等;全部來自過去一週左右。 –

回答

2

由於一些快速谷歌搜索後,我找不到一個特殊的分隔符明顯的欺騙目標,我會添加一個正確的答案。問題是在字符串中轉義會干擾正則表達式字符串中的轉義。雖然'\s'是一個有效的正則表達式令牌,對於python來說,這將代表一個不存在的特殊字符(字符串文字'\s'自動轉換爲'\\s',即r'\s',我懷疑這個過程是什麼已被棄用,顯然,從python 3.6 )。

關鍵是在構建regexen時總是使用原始字符串,以確保python不會被反斜槓混淆。雖然大多數框架用於處理這種模糊性(我假設忽略無效的轉義序列),但顯然某些庫的較新版本試圖強制程序員明確無誤(我完全支持)。

在你特定的情況下,你的模式應該從比如說改變,'\$\$><\$\$'r'\$\$><\$\$'

big_df.iloc[:, -1] = big_df.iloc[:, -1].str.replace(r'\$\$>$', '') 

實際發生的是,反斜槓本身有逃脫的蟒蛇,纔能有文字長度-2 '\$'串在你的正則表達式:

>>> r'\$\$><\$\$' 
'\\$\\$><\\$\\$'