![](/img/trans.png)
[英]How to replace a string that is a part of a dataframe with a list in pandas?
[英]How to isolate part of string in pandas dataframe
我有一個包含一列字符串的數據框。 我想取出每一行中每個字符串的一部分,即年份,然后創建一個新列並將其分配給該列。 我的問題是隔離字符串的最后一部分。 一個例子可能是:'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,然后它就不起作用了。 我還在數據幀的不同行中遇到了不同數量的空格,因此無法計算字符串中的空格數。
我的問題有什么聰明的解決方案嗎?
使用.str.extract()
提取以20
開頭的4位字符串,得到最后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
如果這與終點的距離始終相同,您可以使用:
new_data["Year"] = new_data["Name"].str.slice(start=-4, stop=-2)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.