【问题标题】:Remove decimal from year value in a data frame从数据框中的年份值中删除小数
【发布时间】:2021-02-17 01:36:59
【问题描述】:

我目前在 df 中有一个“建造年份”列,描述建筑物的建造日期,当我导入 csv 文件时,这些年份后面都有小数位: 1920.0, 1985.0 。如何将它们更改为日期时间格式或仅删除小数位?

df1['Year Built'].head()
0    1920.0
1    1985.0
2       NaN
3    1930.0
4    1985.0
Name: Year Built, dtype: float64

当我尝试使用日期时间时...

df1['Year Built'] = pd.to_datetime(df1['Year Built'])

# check
df1['Year Built'].unique()
array(['1970-01-01T00:00:00.000001920', '1970-01-01T00:00:00.000001985',
                                 'NaT', '1970-01-01T00:00:00.000001930',
       '1970-01-01T00:00:00.000001986', '1970-01-01T00:00:00.000001987',
       '1970-01-01T00:00:00.000001988', '1970-01-01T00:00:00.000001990',

【问题讨论】:

    标签: python pandas numpy date error-handling


    【解决方案1】:

    通过%Y 添加参数format 以匹配YYYY 以及errors='coerce' 以将不匹配的值转换为错误值NaT

    df1['Year Built'] = pd.to_datetime(df1['Year Built'], format='%Y', errors='coerce')
    
    print (df1)
      Year Built
    0 1920-01-01
    1 1985-01-01
    2        NaT
    3 1930-01-01
    4 1985-01-01
    

    【讨论】:

      【解决方案2】:

      您可以简单地将它们从 float 更改为 int(如果您不将它们作为数字处理,则可以使用更高版本的字符串)

      df1['Year Built'] = df1['Year Built'].astype(int)
      

      这里是更多详细信息的链接
      https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.astype.html

      【讨论】:

        【解决方案3】:

        类似于 Lion Nadej Ahmed 的回答,您可以在读取数据时使用 dtype 参数,指定 int 以防止年份变为浮点数。

        https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html

        【讨论】:

          【解决方案4】:

          我们可以简单地使用日期时间

          import datetime
          df1['year_built'] = pd.to_datetime(df1['year_built'])
          print(df1)
          

          【讨论】:

            猜你喜欢
            • 2019-09-21
            • 2020-11-21
            • 2016-04-30
            • 2017-03-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多