首页 > 解决方案 > 更新行的替代方法

问题描述

我有以下示例数据:

日期 价值
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'

问题是有一百多行需要更新,上面的代码会非常长。

标签: pythonpandasfor-loopif-statementtime-series

解决方案


我会使用交互式方法,最后将修改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)    

推荐阅读