我有一个名为" sample"的数据帧。它有三列:" birthDay"," birthMonth"和" birthYear"并包含浮点值,如下图所示:
我想添加新列" dateOfBirth"并以整数格式输入并获得以下数据框:
我试过了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"
。
感谢您的帮助。
答案 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
选项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
选项3
如果你真的想从值中重建
使用apply
f = '{birthMonth:0.0f}/{birthDay:0.0f}/{birthYear:0.0f}'.format
sample['dateOfBirth'] = sample.apply(lambda x: f(**x), 1)
sample
<强> 空值 强>
如果一个或多个日期列具有缺失值:
选项1和2不需要任何更改,无论如何都是推荐的选项
如果你想从浮点数构造,我们可以使用布尔掩码和loc
来分配。
sample = pd.DataFrame([
[3., 11., 1988.],
[20., 4., 2001.],
[20., np.nan, 2001.],
], columns=['birthDay', 'birthMonth', 'birthYear'])
sample
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
答案 1 :(得分:1)
在开始之前,字符串连接将所有列转换为int,然后转换为str。
df = df.astype(int).astype(str)
df['dateOfBirth'] = df['birthMonth'] + '/' + df['birthDay'] + '/' + df['birthYear']