我有以下示例資料:
| 日期 | 價值 | |
|---|---|---|
| 0 | 2021/05 | 50 |
| 1 | 2021/06 | 60 |
| 2 | 2021/07 | 70 |
| 3 | 2021/08 | 80 |
| 4 | 2021/09 | 90 |
| 5 | 2021/10 | 100 |
我想更新“日期”列中的資料,例如“2021/05”變為“05/10/2021”,“2021/06”變為“06/12/2021”等等(我必須為每一行手動選擇新日期)。
有沒有更好/更聰明的方法來代替:
for i in df.index:
if df['date'][i] == '2021/05':
df['date'][i] = '05/10/2021'
elif df['date'][i] == '2021/06':
df['date'][i] = '06/12/2021'
問題是有一百多行需要更新,上面的代碼會非常長。
uj5u.com熱心網友回復:
我們可以使用像這樣的select方法numpy:
import numpy as np
condlist = [df['date'] == '2021/05',
df['date'] == '2021/06']
choicelist = ['05/10/2021',
'06/12/2021']
df['date'] = np.select(condlist, choicelist, default=np.nan)
uj5u.com熱心網友回復:
我會使用互動式方法,最后將修改DataFrame后的檔案保存到檔案中:
import pandas as pd
dt = pd.DataFrame({"date":["2021/05", "2021/06", "2021/07", "2021/08", "2021/09", "2021/10"], "value": [50, 60, 70, 80, 90, 100]})
for n, i in enumerate(dt.loc[:,"date"]):
to_be_parsed = True
while parsed:
day = input("What is the day for {:s}?".format(i))
date_str = "{:s}/{:0>2s}".format(i, day)
try:
dt.loc[n,"date"] = pd.to_datetime("{:s}/{:0>2s}".format(i, day)).strftime("%m/%d/%Y")
to_be_parsed = False
except:
print("Invalid date: {:s}. Try again".format(date_str))
output_path = input("Save amended dataframe to path (no input to skip): ")
if len(output_path) > 0:
dt.to_csv(output_path, index=False)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/350785.html
