【问题标题】:How does.format() in this code work [pandas]此代码中的.format() 如何工作 [pandas]
【发布时间】:2020-09-20 00:20:41
【问题描述】:

我是 pandas 的初学者,在这里发帖寻求帮助。 我在 Coursera 上做作业,做完之后我尝试搜索堆栈溢出以找到更紧凑和更快的代码。我在这里看到的东西我明白了,但是当我在 Google 上进行搜索时,我发现 pastebin 上的一些代码看起来好得令人难以置信。

在这里

def convert_housing_data_to_quarters():
    data = pd.read_csv('City_Zhvi_AllHomes.csv')
    towns = data[['State','RegionName']]
    for yr in range(2000,2017):
        for q in range(1,12,3):
            if yr == 2016 and q == 4:
                break
            m1 = '{}-{:02d}'.format(yr,q)
            m2 = '{}-{:02d}'.format(yr,q+1)
            m3 = '{}-{:02d}'.format(yr,q+2)
            quarter = '{}q{}'.format(yr,q)
            towns[quarter] = data[[m1,m2,m3]].mean(axis=1)
    return towns

任务是读取一个包含每个月数据的 .csv,并制作一个包含从 2001 年第一季度到每个季度末季度的数据框,其值是组成它的 3 个月的平均值。 我的解决方案非常正常,查看其他人为此作业编写的代码看起来几乎相似。

链接的代码适用于所有内容,除了它将列命名为 20xxq1、q4、q7 和 q10 而不是 q1、2、3、4。 我不明白第二个 for 循环中的代码是如何工作的。

这个语法是什么意思'{}-{:02d}'?我完全不明白,但它似乎非常强大。我很想知道将来如何使用它。我看到了 pandas 文档,它说你可以使用 dict 作为 .format() 的参数,但我真的不明白它是如何在这里工作的。

感谢您的帮助。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    range(1,12,3) 给出以下结果:1, 4, 7, 10。它只是通过一个步骤3 遍历从112 的值。如果我理解正确,这段代码只是根据第一个月输出季度。例如,第一季度从first 月份开始,然后是forth 月份,依此类推。

    '{}-{:02d}'.format(value1, value2) 只是将您在format() 中输入的任何值放在那些大括号内。现在有更好的格式化字符串的方法:f'{value1}--{value2}'

    {:02d} 只打印宽度为 2 的数字(这里是类似的 question

    希望对你有帮助

    【讨论】:

      【解决方案2】:

      '{}-{:02d}'.format(yr,q) 是一个字符串格式。它根据各自的值返回yrq 的组合。由于{} 大括号中没有索引,所以yr 属于第一个大括号,q 属于第二个大括号。 : 之后的第二部分是选择的格式。 02d 表示将有两位数,如果可能的话用零填充。

      有关字符串格式化的更多信息,您可以参考this link

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-11-11
        • 1970-01-01
        • 2020-01-07
        • 2019-01-24
        • 1970-01-01
        • 1970-01-01
        • 2021-11-29
        • 2011-06-12
        相关资源
        最近更新 更多