2017-07-19 102 views
1

我的數據框中有一列(稱爲'FY'),其中的財務年度值格式爲:2015/20162016/2017Python Pandas - Dataframe專欄 - 將FY格式'2015/2016'轉換爲'15/16'

我想將整列轉換爲15/1616/17等。

我假設你不知何故只能從字符串,以及第8和第9個字符中取出第3,第4和第5個字符,但還沒有弄清楚如何去做。

任何人都可以幫助我嗎?謝謝。

回答

4

給出一個字符串date = "2015/2016",你可以做到以下幾點得到15/16

  1. 使用left, right = date.split('/')同時捕獲獨立日期
  2. 從字符串,刪除所有,但最後2個字符:

    new_left = left[-2:] 
    new_right = right[-2:] 
    
  3. 將新字符串合併爲一個與new_date = new_left+'/'+new_right

編輯:一個一個班輪解決方案直接與數據幀的工作的基礎上,其他答案:

df['new'] = df['fy'].str.split('/')[0][-2:] +'/'+ df['fy'].str.split('/')[1][-2:] 

這是一個比較通用的方法,因爲它會與不同長度的字符串的工作,並取得只剩下最後2字符,防止不正確的索引錯誤,並防止你對它們進行硬編碼(即使你的日期可能總是有4個字符加上'/',至少在接下來的8,000年內)

+1

非常感謝。正如你所說的那樣工作。我有upvoted。我希望你不要介意,但我會接受安德魯的答案,因爲我認爲它可以幫助更多的人,因爲它可以在一行中完成所有事情。 – ScoutEU

+1

好的,我可以幫忙,但是如果你的字符串不知道怎麼回事不同的長度,因爲索引將被抵消或不正確。這種方法更通用 – DarkCygnus

+0

根據您的反饋意見和其他答案擴大我的答案 – DarkCygnus

1

如果你有一個字符串你總是可以通過書寫選擇它的部分:

富= 'ABCDEFG'

foo2的= foo的[2:4]

打印foo2的

那麼輸出將是: CD

+0

謝謝你的幫助:) – ScoutEU

+0

沒問題,樂意幫忙:) – Mattias

1

嘗試此

for index, rows in df.iterrows(): 
    s = rows["FY"] 
    df.loc[index, "FY"] = "".join(s[2:5] + s[7:]) 

這裏是df是dataframe對象。

+0

嘿,先試一試吧,因爲它一氣呵成。雖然我沒有得到任何錯誤,它也沒有做任何事情? for index,rows in time1.iterrows(): s = rows ['Date FY'] time1.loc [index,'Date FY'] ==「」.join(s [2:5] + s [7:]) – ScoutEU

+1

非常感謝:) – ScoutEU

+0

再試一次。我更新了代碼。我插入了==而不是'=' – Djokester

2

下面是使用這個樣本數據集的另一種方式:

df 
      fy 
0 2015/2016 
1 2016/2017 
2 2017/2018 

df['fy_new'] = df['fy'].str[2:4] + '/' + df['fy'].str[7:9] 
df 
      fy fy_new 
0 2015/2016 15/16 
1 2016/2017 16/17 
2 2017/2018 17/18 
+1

完美。完全按照我的意願工作! :) – ScoutEU

2

選項1
使用pd.Series.str.replace

df.FY.str.replace('\d{2}(\d{2}/)\d{2}(\d{2})', r'\1\2') 

0 15/16 
1 16/17 
Name: FY, dtype: object 

選項2
使用pd.DataFrame.replace

df.replace(dict(FY={'\d{2}(\d{2}/)\d{2}(\d{2})': r'\1\2'}), regex=True) 

     FY 
0 15/16 
1 16/17 
+0

很多偉大的答案在這裏,非常感謝你的幫助。我已經標記安德魯斯答案爲接受的答案,但真的很感謝您的幫助:) – ScoutEU

+0

@ScoutEU感謝您的評論。請記住,你接受的答案的選擇應該是關於你認爲最有用的。但這是你的選擇......很高興我能幫上忙。 – piRSquared

+0

好點。我將在標記之前等到帖子更老。謝謝 – ScoutEU

相關問題