在特定年份的熊猫之后删除行

时间:2019-08-08 10:11:08

标签: python pandas

我的数据框中有一列,其年份格式如下:

2018-19
2017-18

年份是对象数据类型。我想将此列的类型更改为datetime,然后删除1979-80年之前的所有行。但是,我尝试这样做,但出现格式错误。这样做的正确或更好的方法是什么?

BOS['Season'] = pd.to_datetime(BOS['Season'], format = '%Y%y')

我对Python很陌生,所以如果您能告诉我我做错了什么,我将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:4)

我认为这里分别是最简单的比较年份,例如在-之前:

print (BOS)
    Season
0  1979-80
1  2018-19
2  2017-18


df = BOS[BOS['Season'].str.split('-').str[0].astype(int) < 2017]
print (df)
    Season
0  1979-80

详细信息

首先将Series.str.split的值拆分为列表,然后将其筛选为第一列表:

print (BOS['Season'].str.split('-'))
0    [1979, 80]
1    [2018, 19]
2    [2017, 18]
Name: Season, dtype: object

print (BOS['Season'].str.split('-').str[0])
0    1979
1    2018
2    2017
Name: Season, dtype: object

或将两年转换为单独的列:

BOS['start'] = pd.to_datetime(BOS['Season'].str.split('-').str[0],  format='%Y').dt.year
BOS['end'] =  BOS['start'] + 1
print (BOS)
    Season  start   end
0  1979-80   1979  1980
1  2018-19   2018  2019
2  2017-18   2017  2018

答案 1 :(得分:1)

我本可以使用Series的.str.slice访问器来选择我希望保留的日期部分,然后将其插入pd.to_datetime()函数中。然后,使用.loc[]和布尔掩码进行选择就很容易了。

import pandas as pd 

data = {
    'date' : ['2016-17', '2017-18', '2018-19', '2019-20']
}
df = pd.DataFrame(data)
print(df)
#       date
# 0  2016-17
# 1  2017-18
# 2  2018-19
# 3  2019-20

df['date'] = pd.to_datetime(df['date'].str.slice(0, 4), format='%Y')
print(df)
#         date
# 0 2016-01-01
# 1 2017-01-01
# 2 2018-01-01
# 3 2019-01-01


df = df.loc[ df['date'].dt.year < 2018 ]
print(df)
#           date
# 0 2016-01-01
# 1 2017-01-01