【问题标题】:Alternatives to update rows更新行的替代方法
【发布时间】:2021-12-20 04:49:51
【问题描述】:

我有以下示例数据:

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

我想更新“日期”列中的数据,例如“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'

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

【问题讨论】:

  • 您是否有某种数据结构或文件,其中包含需要更改哪些行?
  • 你如何决定设置哪个月份:10、12、?
  • 我正在做出这个选择。我拥有的数据不完整 - 它只包含年/月,所以我也必须手动分配日期。但问题是使用我给出的代码作为示例会太长(肯定超过 100 行)
  • 试试applymap?
  • 06/12/2021 是 6 月 12 日还是 12 月 6 日(根据您的数据)?

标签: python pandas for-loop if-statement time-series


【解决方案1】:

我们可以像这样使用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)

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-29
      • 1970-01-01
      • 2018-10-09
      • 1970-01-01
      • 2019-06-14
      • 2015-06-22
      相关资源
      最近更新 更多