【问题标题】:Using for loop in Python to add leading zeros to date column在 Python 中使用 for 循环在日期列中添加前导零
【发布时间】:2020-12-30 20:28:48
【问题描述】:

我查看了很多其他问题,但没有找到一个非常合适的问题。

假设我有数据框,df:

Name     Month
Bob      5
Jim      7
Mary     12

我正在尝试编写一个 for 循环,它将前导零添加到具有一位数的月份(并按原样打印其他月份),然后我可以用列表覆盖该列。

这就是我所拥有的

list={}
for i in df['Month']:
      if len(df['Month'][i]) < 2:
          print("{:02}".format(i))
      else:
          print(i)
print(list)
df['Month']=list

这样的代码给了我错误:

TypeError: object of type 'numpy.int64' has no len()

我不完全确定在哪里进行故障排除或从这里开始。谢谢!

【问题讨论】:

  • 您混合了 2 种循环方式: - for i in df['Month'] 将评估为 5,然后是 7,然后是 12。 - 可能您的意思是“for i in range (0, len(df['月']
  • 不幸的是,我必须为此使用循环(它用于分配),因此不能使用 zfill 的解决方法。谢谢巨魔,我会考虑改变那部分。

标签: python pandas for-loop leading-zero


【解决方案1】:

给你(没有循环):

df["Month"] = df.Month.map("{:02}".format)

【讨论】:

  • 这比循环优雅得多:-)
【解决方案2】:
df['Month'].astype(str).str.zfill(2)

【讨论】:

    【解决方案3】:

    你可以试试这个:

    df = pd.read_csv('file.csv', converters={'Month': '{:0>2}'.format}).astype('str')
    print(df)
    

    【讨论】:

      【解决方案4】:

      为此使用 zfill:

      df['Month'] = df['Month'].astype(str).str.zfill(2)
      print(df)
      
         Name Month
      0   Bob    05
      1   Jim    07
      2  Mary    12
      

      【讨论】:

        猜你喜欢
        • 2013-08-29
        • 2012-06-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-02-08
        • 2020-03-23
        相关资源
        最近更新 更多