我有一個包含一列字串的資料框。我想取出每一行中每個字串的一部分,即年份,然后創建一個新列并將其分配給該列。我的問題是隔離字串的最后一部分。一個例子可能是:'TON GFR 2018 N' 對于這個字串,我將能夠通過運行以下之一來執行(為此,我想隔離 18 而不是 2018)。
new_data['Year'] = pd.DataFrame([str(ele[1])[:2] for ele in list(new_data['Name'].str.split('20'))])
new_data['Year'] = new_data['Name'].str.split('20').str[1]
new_data['Year'] = new_data['Year'].str[:2]
但是,我也遇到過這樣的名字:“TON RO20 2018 N”或 TON 2020 N,然后它就不起作用了。我還在資料幀的不同行中遇到了不同數量的空格,因此無法計算字串中的空格數。
我的問題有什么聰明的解決方案嗎?
uj5u.com熱心網友回復:
使用.str.extract()提取4位數字的字串開始20,并得到最后2個位數,具體如下:
new_data['Year'] = new_data['Name'].str.extract(r'20(\d\d)')
如果您想確保 4 位字串不是較長字串/數字的一部分,您可以進一步使用正則運算式元字符\b(詞邊界)來包圍目標字串,如下所示:
new_data['Year'] = new_data['Name'].str.extract(r'\b20(\d\d)\b')
演示
輸入資料:
print(new_data)
Name
0 TON GFR 2018 N
1 TON RO20 2018 N
2 TON 2020 N
結果:
print(new_data)
Name Year
0 TON GFR 2018 N 18
1 TON RO20 2018 N 18
2 TON 2020 N 20
uj5u.com熱心網友回復:
如果這與終點的距離始終相同,您可以使用:
new_data["Year"] = new_data["Name"].str.slice(start=-4, stop=-2)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/336074.html
上一篇:如何修復熊貓資料框中的列順序?
