我猜想这个日期的格式为12/29/2011作为字符串,我只需要Year,所以我编写此函数仅提取Year,但是得到了
“ ValueError:无法将浮点NaN转换为整数”
似乎我在某处有Nan,并且唯一可以想到的解决方案是删除Nan的行,但是我无法做到这一点,因为我需要其他列中的数据。
SELECT a, rownum*2 as r FROM table
UNION ALL
SELECT b, (rownum*2)+1 FROM table
ORDER BY r
使用此代码时,get_year函数有效
def get_year(date):
year = ''
try:
year = date[-4:]
except TypeError:
year = str(date)[0:4]
return (year).astype(int)
我正在使用.loc,想知道如何跳过.nan的
for i in df.index:
if (not pd.isna(df['yearOpened'][i]) and get_year(df['yearOpened'][i]) > 1955):
print('something')
答案 0 :(得分:0)
您可以使用Python的内置日期时间库轻松地从字符串中获取年份。
from datetime import datetime
date = '12/29/2011'
dt = datetime.strptime(date, '%m/%d/%Y') #create datetime object
dt.year
Output: 2011
OR
您可以使用pandas.to_datetime函数来为您处理nan值。
import pandas as pd
import numpy as np
dates = ['12/29/2011', '12/30/2012', np.nan]
dt = pd.to_datetime(dates)
dt.year
Output: Float64Index([2011.0, 2012.0, nan], dtype='float64')
编辑(响应评论)
要获取所有不良行的DataFrame,您只需索引从NaT
操作返回pd.to_datetime(df['dates'], errors='coerce')
的所有行。
data = {'dates': ['12/29/2011', '12/30/2012', np.nan, '1/1/9999'],
'values': [1,2,3,4]}
df = pd.DataFrame(data)
dt = pd.to_datetime(df['dates'], errors='coerce')
bad_rows = df[dt.isna()] #indexing out all rows which contain nan values
bad_rows.to_csv('bad_data.csv')