次の図のように、「birthDay」、「birthMonth」、「birthYear」の3つの列があり、float値を含む「sample」という名前のデータフレームがあります。
新しい列「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"
。
よろしくお願いします。
セットアップ
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
nulls
1つ以上の日付列に欠落している値がある場合:
オプション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
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加