将浮点值更改为整数值,然后在pandas数据帧中连接

时间:2016-12-08 01:30:01

标签: python pandas dataframe

我有一个名为" sample"的数据帧。它有三列:" birthDay"," birthMonth"和" birthYear"并包含浮点值,如下图所示:

enter image description here

我想添加新列" dateOfBirth"并以整数格式输入并获得以下数据框:

enter image description here

我试过了sample["dateOfBirth"] = sample["birthDay"].map(str). +"/"+ baseball["birthMonth"].map(str) +"/"+ baseball["birthYear"].map(str)。但结果是"11.0/3.0/1988.0""4.0/20.0/2001.0"

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

设置

sample = pd.DataFrame([
        [3., 11., 1988.],
        [20., 4., 2001.],
    ], columns=['birthDay', 'birthMonth', 'birthYear'])

选项1
制作dateOfBirth一系列Timestamps

# dictionary map to rename to canonical date names
# enables convenient conversion using pd.to_datetime
m = dict(birthDay='Day', birthMonth='Month', birthYear='Year')
sample['dateOfBirth'] = pd.to_datetime(sample.rename(columns=m))

sample

enter image description here

选项2
如果你坚持一个字符串
dt访问者与strftime

一起使用
# dictionary map to rename to canonical date names
# enables convenient conversion using pd.to_datetime
m = dict(birthDay='Day', birthMonth='Month', birthYear='Year')

sample['dateOfBirth'] = pd.to_datetime(sample.rename(columns=m)) \
                          .dt.strftime('%-m/%-d/%Y')

sample

enter image description here

选项3
如果你真的想从值中重建 使用apply

f = '{birthMonth:0.0f}/{birthDay:0.0f}/{birthYear:0.0f}'.format
sample['dateOfBirth'] = sample.apply(lambda x: f(**x), 1)
sample

enter image description here

<强> 空值
如果一个或多个日期列具有缺失值:
选项1和2不需要任何更改,无论如何都是推荐的选项 如果你想从浮点数构造,我们可以使用布尔掩码和loc来分配。

sample = pd.DataFrame([
        [3., 11., 1988.],
        [20., 4., 2001.],
        [20., np.nan, 2001.],
    ], columns=['birthDay', 'birthMonth', 'birthYear'])

sample

enter image description here

f = '{birthMonth:0.0f}/{birthDay:0.0f}/{birthYear:0.0f}'.format
mask = sample[['birthDay', 'birthMonth', 'birthYear']].notnull().all(1)
sample.loc[mask, 'dateOfBirth'] = sample.apply(lambda x: f(**x), 1)
sample

enter image description here

<强> 定时
给定样本
enter image description here

<强> 定时
给出样本时间10,000
enter image description here

答案 1 :(得分:1)

在开始之前,字符串连接将所有列转换为int,然后转换为str。

df = df.astype(int).astype(str)
df['dateOfBirth'] = df['birthMonth'] + '/' + df['birthDay'] + '/' + df['birthYear']