pandas中如何合并DataFrame的两列

如下DataFrame, 一列日期,一列时间,现需要把日期和时间合并为一列。

1
df = pd.DataFrame([['2023-01-05','0930',100],['2023-01-05','0935',200],['2023-01-05','0940',333]],columns=['日期','时间','数量'])
1
2
3
4
       日期    时间   数量
0 2023-01-05 0930 100
1 2023-01-05 0935 200
2 2023-01-05 0940 333

最简单的做法是直接两列按字符串拼接:

1
df['日期时间1'] = df['日期'] + ' ' + df['时间']

如果要合并的列不是字符串,则需显式转化一下再合并:

1
df['日期时间2'] = df['日期'].astype(str) + ' ' + df['时间'].astype(str)

还可以这样:

1
df['日期时间3'] = df[['日期','时间']].apply(lambda x: ' '.join(x), axis=1)

或者:

1
df['日期时间4'] = df.apply(lambda x: x['日期'] + ' ' + x['时间'], axis=1)

如果要合并的列中有nan,则可以使用这个:

1
df['日期时间5'] = df['日期'].str.cat(df['时间'], sep=' ', na_rep='?')

最后效果如下:

1
2
3
4
5
>>> df
日期 时间 数量 日期时间1 日期时间2 日期时间3 日期时间4 日期时间5
0 2023-01-05 0930 100 2023-01-05 0930 2023-01-05 0930 2023-01-05 0930 2023-01-05 0930 2023-01-05 0930
1 2023-01-05 0935 200 2023-01-05 0935 2023-01-05 0935 2023-01-05 0935 2023-01-05 0935 2023-01-05 0935
2 2023-01-05 0940 333 2023-01-05 0940 2023-01-05 0940 2023-01-05 0940 2023-01-05 0940 2023-01-05 0940

完毕!