我编写了一个if-else函数,该函数基于四分之一的数字将字符串(即'1/1 /')与转换为字符串的整数(即str(2017))连接起来。我有三个要使用的数据框。其中两个数据帧产生了预期的结果(即'1/1/2017')。最后一个数据帧产生以下“ 1/1 / 2017.0”,这使其不转换为日期时间。
我不知所措,因为基于dtypes,所有三个数据帧都将季度和年份都列为int64,并且所有三个数据帧最初都来自同一csv。
我的第一个猜测是,在准备最后一个数据帧时,我将自己的岁月转换为浮点数。我试图确保Year列是带有.astype()的整数。在应用此功能之前和之后,年份列在.dtypes下均列为int64。
数据框
from pandas import DataFrame
Data = {'quarter': [1,2,3,4],
'year': [2017,2017,2017,2017]}
df = DataFrame(Data, columns = ['quarter', 'year'])
这是我正在使用的功能
def f(row):
if row['quarter'] == 1:
val = '1/1/' + str(row['year'])
elif row['quarter'] == 2:
val = '4/1/' + str(row['year'])
elif row['quarter'] == 3:
val = '7/1/' + str(row['year'])
else:
val = '10/1/' + str(row['year'])
return val
我的预期结果将是'1/1/2017','4/1/2017','7/1/2017','10/1/2017'
我没有收到任何错误消息或警告。
答案 0 :(得分:0)
不确定为什么代码不能与第三个数据集一起使用,但是可以使用pandas函数而不是编写自己的函数。它可能会解决您的问题。
>>> df['date'] = pd.to_datetime(
... df['year'].astype(str).str.cat(df['quarter'].astype(str), sep='Q'))
>>> df
quarter year date
0 1 2017 2017-01-01
1 2 2017 2017-04-01
2 3 2017 2017-07-01
3 4 2017 2017-10-01
您可以更改日期格式,例如:
>>> df['date'].dt.strftime('%m/%d/%Y')
0 01/01/2017
1 04/01/2017
2 07/01/2017
3 10/01/2017
Name: date, dtype: object