【问题标题】:justifying the YEAR column digit in Python在 Python 中证明 YEAR 列数字的合理性
【发布时间】:2020-05-24 12:20:28
【问题描述】:

我有一个大数据集。我将 CSV 转换为带有熊猫的数据框。该列包括从 1965 年到 2015 年的年份。该列的样本是这样的

1965.0
  66.0
  67.0
   .
   .
   .
  69.0
1970.0
  71.0
   .
   .
  79.0
1980.0
   . 
   .
   .
2000.0
   1.0
   2.0
    .
    .
    .
  15.0

所以我的问题是,如何在没有最后一个 .0 的情况下将所有此列更改为 4 位格式

顺便说一句,当我使用 .info() 检查我的数据时,此列是:

Year                51 non-null    object

谢谢

【问题讨论】:

    标签: python datetime digits


    【解决方案1】:

    您可以将列转换为float,应用自定义函数,分别添加 1900 或 2000。如果这对您更有用,请将其输出转换为int。例如:

    import pandas as pd
    
    df = pd.DataFrame({'y': ['1970.0',
                               '71.0',
                               '79.0',
                             '1980.0',
                             '2000.0',
                                '1.0',
                                '2.0',
                               '15.0']})
    
    def to_4digit(i):
        if i < 1900:
            if i >= 65:
                return 1900 + i
            return 2000 + i
        return i
    
    df['y'] = df['y'].astype(float).apply(to_4digit).astype(int)
    # df['y']
    # 0    1970
    # 1    1971
    # 2    1979
    # 3    1980
    # 4    2000
    # 5    2001
    # 6    2002
    # 7    2015
    

    【讨论】:

    • 它工作得很好,虽然我仍然无法理解你的功能。请你给我一些额外的解释。我还是非常初学者,我知道这种风格 def func() if condition1: return AAA if条件2:返回BBB返回CCC
    • @sam_sam:Python 中函数对象的一个​​很好的特性是,一旦你返回一个值,函数体的执行就会终止。我们可以在这里利用它来避免必须组合条件等。如果您牢记这一点,那么您将面临如何构造语句的逻辑问题。
    • 所以函数当 (i) 大于 65 时添加 1900 并终止进程,函数的第 3 行和第 4 行。当 (i) 小于 65 时添加 2000,函数的第五行。但我有 4digit 行,例如 1965,1970,1980,1990,2000。为什么第二行是 i
    • @sam_sam:从外向内阅读。 1)i &lt; 1900为False,没有输入if语句,所以直接返回i(已经是4位数字了)。 2) i &lt; 1900 是 True (它是一个 2 位数字),现在我们要检查是加 1900 还是 2000。 2.1) i &gt;= 65 是 True,所以返回 i+1900。 2.2) i &gt;= 65 为 False,所以返回 i+2000。请记住,return 之后的任何内容都不会在 return 本身执行后立即执行:)
    猜你喜欢
    • 2017-11-17
    • 2023-03-27
    • 2017-08-10
    • 2021-07-16
    • 1970-01-01
    • 1970-01-01
    • 2013-10-05
    相关资源
    最近更新 更多