将列转换为日期时间格式时显示超出范围的纳秒时间戳错误

时间:2019-10-19 23:27:22

标签: python pandas datetime

我正在使用数据集-陨石降落,可在此处找到https://www.kaggle.com/nasa/meteorite-landings#meteorite-landings.csv

数据快照:https://imgur.com/a/CrwL3h6

数据集有一个'year'列,我将其重命名为'year1'

data = data.rename(columns = {"year":"year1"}) 

给出 year1 列:

0        01/01/1880 12:00:00 AM
1                 1/1/1951 0:00
2                 1/1/1952 0:00
3                 1/1/1976 0:00
4                 1/1/1902 0:00
                  ...          
45711             1/1/1990 0:00
45712             1/1/1999 0:00
45713             1/1/1939 0:00
45714             1/1/2003 0:00
45715             1/1/1976 0:00
Name: year1, Length: 45716, dtype: object

我想将此列转换为datetime格式,以便仅保留年份,因为日期和时间是重复的值,这没有用,而且该列的名称为“ year”。

我用了这个:

data['year1'] = pd.to_datetime(data['year1'])

当我尝试这样做时显示错误:

OutOfBoundsDatetime: Out of bounds nanosecond timestamp: 1583-01-01 00:00:00

为了解决这个问题,我尝试使用此方法:

data['year1'] = pd.to_datetime(data['year1'],errors='coerce')

但是这样做,即使year1列也不是日期时间格式。

如何将其转换为日期时间格式?

样本数据:

                name   id nametype     recclass      mass  fall    year    reclat    reclong               GeoLocation
              Aachen    1    Valid           L5      21.0  Fell  1880.0  50.77500    6.08333     (50.775000, 6.083330)
              Aarhus    2    Valid           H6     720.0  Fell  1951.0  56.18333   10.23333    (56.183330, 10.233330)
                Abee    6    Valid          EH4  107000.0  Fell  1952.0  54.21667 -113.00000  (54.216670, -113.000000)
            Acapulco   10    Valid  Acapulcoite    1914.0  Fell  1976.0  16.88333  -99.90000   (16.883330, -99.900000)
             Achiras  370    Valid           L6     780.0  Fell  1902.0 -33.16667  -64.95000  (-33.166670, -64.950000)
            Adhi Kot  379    Valid          EH4    4239.0  Fell  1919.0  32.10000   71.80000    (32.100000, 71.800000)
 Adzhi-Bogdo (stone)  390    Valid        LL3-6     910.0  Fell  1949.0  44.83333   95.16667    (44.833330, 95.166670)
                Agen  392    Valid           H5   30000.0  Fell  1814.0  44.21667    0.61667     (44.216670, 0.616670)
              Aguada  398    Valid           L6    1620.0  Fell  1930.0 -31.60000  -65.23333  (-31.600000, -65.233330)
       Aguila Blanca  417    Valid            L    1440.0  Fell  1920.0 -30.86667  -64.55000  (-30.866670, -64.550000)

1 个答案:

答案 0 :(得分:1)

Pandas拒绝使用日期时间早于1677的日期。但是无论如何,因为您输入的CSV文件的public void DoSomethingWith(IEnumerable<string> values) { var notNullValues = values.Where(value => value != null).ToArray(); // Do something with not null values } public void DoSomethingWith(IEnumerable<Nullable<T>> values) { var notEmptyValues = values.Where(value => value.HasValue).ToArray(); // Do something with not null values } 列正好是这样:一年。因此,只需停止执行将year列转换为日期时间的操作,然后将其加载为纯整数列即可。