2015-03-13 50 views
0

假設我有一個熊貓數據幀以下行:如何修改字符串的大熊貓數據幀(正則表達式?)

970 P-A1-1019-03-C15,15 23987896 1 8 
971 P-A1-1019-06-B15,15 23251711 4 8 
972 P-A1-1019-08-C15,15 12160034 2 8 
973 P-A1-1020-01-D15,15 8760012  1 8 

我想改變第二列刪除」,15" ,從字符串。期望的最終狀態會是這樣的:

970 P-A1-1019-03-C15 23987896 1 8 
971 P-A1-1019-06-B15 23251711 4 8 
972 P-A1-1019-08-C15 12160034 2 8 
973 P-A1-1020-01-D15 8760012  1 8 

的事情,除去不會永遠是「15" ,因爲它可能是」 10" ,「03" ,」 4" 等。另外,在輸入某些行是不同的格式,並且可能是這樣的:

4 RR00-0,2020338 24380076 4 12 
5 RR00-0,2020738 10562767 2 12 
6 ,D    24260808 1 12 
7 ,D    23521158 1 12 

起初,我只是在字符串倒是P-A1-1019-03的」形式的情況下,有興趣的-C15「,所以能夠刪除不符合該特定格式的行將會很好。

是否有內置的方式來做這種處理,或者我需要手動迭代每一行?

+1

你的第一件事情是很容易你可以用一個正則表達式來過濾,比如'df [df ['col'] = df ['col']。str.replace(',15','')' ] .str.contains(正則表達式)]' – EdChum 2015-03-13 16:31:33

+0

str.replace(',15','')是否適用於要移除的東西是',11'的情況? – TraxusIV 2015-03-13 16:34:09

+1

不,它會查找完全匹配,它取決於數據的多樣性,您可以說分割字符串:'df ['col'] = df ['col']。str。[: - 3]'這將會去掉最後3個字符(我想我可能會關閉一個)或者這樣做:'df ['col'] = df ['col']。str [:15]'如果你想要前16個字符 – EdChum 2015-03-13 16:36:34

回答

1

這應該刪除所有「 15' 值:

dataframe['string column'] = dataframe['string column'].apply(lambda value:[value].split(',')[0] if [value].split(',')[0] == '15' else value) 

這應該刪除所有」,15' 值,如果他們在你提供的格式:

dataframe['string column'] = dataframe['string column'].apply(lambda value:[value].split(',')[0] if ([value].split(',')[0] == '15') & ('P-A1-' in value) else value)