更新行的替代方法
Alternatives to update rows
我有以下示例数据:
date
value
0
2021/05
50
1
2021/06
60
2
2021/07
70
3
2021/08
80
4
2021/09
90
5
2021/10
100
我想更新 'date' 列中的数据,例如“2021/05”变为“05/10/2021”,“2021/06”变为“06/12/2021”等等(我必须为每一行手动选择新日期)。
有没有 better/more 聪明的方法来代替:
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'
问题是有一百多行需要更新,上面的代码会非常长。
我会使用交互式方法,最后将修改后的 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)
我们可以像这样使用 numpy
中的 select
方法:
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)
我有以下示例数据:
date | value | |
---|---|---|
0 | 2021/05 | 50 |
1 | 2021/06 | 60 |
2 | 2021/07 | 70 |
3 | 2021/08 | 80 |
4 | 2021/09 | 90 |
5 | 2021/10 | 100 |
我想更新 'date' 列中的数据,例如“2021/05”变为“05/10/2021”,“2021/06”变为“06/12/2021”等等(我必须为每一行手动选择新日期)。
有没有 better/more 聪明的方法来代替:
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'
问题是有一百多行需要更新,上面的代码会非常长。
我会使用交互式方法,最后将修改后的 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)
我们可以像这样使用 numpy
中的 select
方法:
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)