Python中如何将数组行拼接为指定格式的日期时间DataFrame
解决方案
核心思路
不用merge或concat(这俩是用来合并数据结构的,不适合你的场景),核心是从数组中提取指定位置的时间日期元素,然后格式化补零,最后生成DataFrame。
单一行数组处理代码
import numpy as np import pandas as pd # 示例数组,x用占位符np.nan代替(实际替换成你的真实值) arr = np.array([np.nan, np.nan, 0, 0, 3, np.nan, np.nan, 10, 8, 2022]) # 提取时、分、秒、日、月、年(替换成你数组中对应值的实际索引) hour, minute, second = arr[2], arr[3], arr[4] day, month, year = arr[7], arr[8], arr[9] # 格式化:补零到两位,生成目标字符串 time_str = f"{int(hour):02d}:{int(minute):02d}:{int(second):02d}" date_str = f"{int(year)}/{int(month):02d}/{int(day):02d}" # 生成DataFrame df = pd.DataFrame({"Date": [date_str], "Time": [time_str]}) print(df)
输出结果:
Date Time 0 2022/08/10 00:00:03
多行数组批量处理代码
如果你的数组是多行的二维数组,用批量方式处理更高效:
import numpy as np import pandas as pd # 示例二维数组 arr_2d = np.array([ [np.nan, np.nan, 0, 0, 3, np.nan, np.nan, 10, 8, 2022], [np.nan, np.nan, 12, 30, 45, np.nan, np.nan, 5, 12, 2023] ]) # 批量提取所有行的对应字段并转成整数 hours = arr_2d[:, 2].astype(int) minutes = arr_2d[:, 3].astype(int) seconds = arr_2d[:, 4].astype(int) days = arr_2d[:, 7].astype(int) months = arr_2d[:, 8].astype(int) years = arr_2d[:, 9].astype(int) # 批量格式化字符串 time_strs = [f"{h:02d}:{m:02d}:{s:02d}" for h, m, s in zip(hours, minutes, seconds)] date_strs = [f"{y}/{m:02d}/{d:02d}" for y, m, d in zip(years, months, days)] # 生成DataFrame df = pd.DataFrame({"Date": date_strs, "Time": time_strs}) print(df)
输出结果:
Date Time 0 2022/08/10 00:00:03 1 2023/12/05 12:30:45
关键注意点
- 替换代码中的索引:确保
arr[2]、arr[3]等位置和你实际数组中时、分、秒等值的位置一致; - 补零操作:用
{:02d}格式化整数,确保单个数字的月份、日期、时分秒自动补零(比如8变成08,0保持00); - 类型转换:数组元素可能是浮点数,需要用
int()转成整数再格式化,避免出现.0的问题。
内容的提问来源于stack exchange,提问作者MaryJule
相关产品推荐
相关产品推荐

