连接字符串和整数的函数在转换为字符串之前先转换为浮点数

时间:2019-08-29 20:55:12

标签: python pandas

我编写了一个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'

我没有收到任何错误消息或警告。

1 个答案:

答案 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