【问题标题】:Conditional loop for pandas dataframe rows熊猫数据框行的条件循环
【发布时间】:2018-12-11 01:59:11
【问题描述】:

我有一个从较大的框架中解析出来的数据框,如下所示:

Contract Date
2012.0
2011.0
2011.0
2010.0
1312.0
1235.0
1235.0
1235.0
1230.0
.
.
111.0
111.0
110.0
110.0

我已将整个内容转换为字符串,以便我可以对值进行切片,因为这些日期的格式非常奇怪。

基本上,2012.0 - 2010.0 是每年的 12 月(2012 年 - 2010 年),但像 1235.0110.0 这样的日期是 MMYY 格式 - 1235.0 是 2035 年 12 月,110.0 是 2010 年 1 月。

我想要的是创建一个简单的循环来迭代这些日期,并根据我上面描述的条件将它们转换为月份和年份。我尝试先使用iterrows 尝试获取月份:

for index, row in contract.iterrows():
    if len(row) > 4:
        contract['Month'] = contract['Contract_Exp_Date'].str[:2]
    else:
        contract['Month'] = contract['Contract_Exp_Date'].str[:1]

但这不起作用并且循环了很长时间 - 可能是因为我需要 appending 到一个新列,而不是在每次迭代时创建一个新列 Month

如何根据我上面提到的条件正确地遍历每一行并抓取月份和年份?

【问题讨论】:

    标签: python string python-3.x pandas


    【解决方案1】:

    不需要条件,只用最后三个字符的逻辑,所以逻辑写:

    2018.0
       ^^^
       removed
    111.0
      ^^^
      removed
    

    所以使用:

    df['Contract']=df['Contract'].str[:-3]
    

    现在:

    print(df['Contract'])
    

    是:

    0     201
    1     201
    2     201
    3     201
    4     131
    5     123
    6     123
    7     123
    8     123
    9      11
    10     11
    11     11
    12     11
    Name: Contract, dtype: object
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-20
      • 2020-07-05
      • 2017-10-29
      • 1970-01-01
      相关资源
      最近更新 更多