两种情况,第一种所有参数值不缺少,不用填充;第二种先填充,在处理。CSV文件、xlsx文件和字典型都一样处理,本次操作为jupyter notebook
一、时间参数信息不缺失
方法一
表格示例如下:
1.读取文件显示信息
import pandas as pd
# 假设CSV文件名为'ceshi.csv',并且具有以下列:year, month, day, hour, minute, second
csv_file = 'ceshi.csv'
# 读取CSV文件
df = pd.read_csv(csv_file)
# 检查读取的数据
print(df.head())
2.操作处理,并且合并的列在后面新添加
# 将年、月、日、时、分、秒列组合成datetime对象
# 注意:这里假设所有列都存在于DataFrame中,并且没有缺失值(或者你已经以某种方式处理了缺失值)
df['datetime'] = pd.to_datetime(df[['year', 'month', 'day', 'hour', 'minute', 'second']])
# 显示结果
print(df)
方法二
1.使用.get方法提供默认值,以防某些列不存在,默认用0填充
import pandas as pd
# 假设你已经从'cs.csv'文件中读取了数据到df DataFrame中
df = pd.read_csv('cs.csv')
# 无需创建ceshi这个中间DataFrame,直接使用df即可
# 使用.get方法提供默认值,以防某些列不存在
# 注意:这里我们假设如果列不存在,则使用全0数组作为默认值,且这些数组的长度与df相同
hours = df.get('hour', [0] * len(df)).astype(int) # 确保小时列为整数类型
minutes = df.get('minute', [0] * len(df)).astype(int) # 确保分钟列为整数类型
seconds = df.get('second', [0] * len(df)).astype(int) # 确保秒列为整数类型
# 使用apply函数结合lambda表达式来构造日期时间字符串,并转换为datetime对象
# 注意:这里我们假设年、月、日列总是存在的,并且它们的类型适合进行日期时间转换
df['datetime'] = df.apply(lambda row: pd.to_datetime(f"{row['year']}-{row['month']:02d}-{row['day']:02d} "
f"{hours[row.name]:02d}:{minutes[row.name]:02d}:{seconds[row.name]:02d}"),
axis=1)
# 显示结果,查看新添加的'datetime'列
print(df)
2.缺失时被替换为字符串 ‘00’
import pandas as pd
# 假设你已经从'cs.csv'文件中读取了数据到df DataFrame中
df = pd.read_csv('cs.csv')
# 方法1:使用 apply 和字符串格式化
# 首先,确保所有可选的时间列(hour, minute, second)在缺失时被替换为字符串 '00'
for col in ['hour', 'minute', 'second']:
df[col] = df[col].fillna('00').astype(str)
# 创建一个日期时间字符串列
df['datetime_str'] = df.apply(lambda row: f"{row['year']}-{row['month']:02d}-{row['day']:02d} "
f"{row['hour']}:{row['minute']}:{row['second']}", axis=1)
# 将字符串转换为 datetime 对象
df['datetime'] = pd.to_datetime(df['datetime_str'])
# 如果不需要 datetime_str 列,可以删除它
df = df.drop(columns=['datetime_str'])
print(df)
二、缺失值填充
import pandas as pd
# 假设你已经从'cs.csv'文件中读取了数据到df DataFrame中
df = pd.read_csv('cs.csv')
# 方法2:使用 pd.to_datetime 和 errors 参数处理缺失值
# 注意:这种方法要求所有列都存在,并且如果某些行缺少时间信息,则需要适当地处理错误。
# 这里我们先用 fillna 填充缺失的时间信息为0(假设0是一个合理的默认值)
df_filled = df.fillna({'hour': 0, 'minute': 0, 'second': 0})
# 直接从字典创建 datetime,忽略错误(如果列不匹配或格式错误)
# 注意:这种方法要求列名恰好匹配 pd.to_datetime 的解析规则(即 year, month, day, hour, minute, second)
try:
df_filled['datetime'] = pd.to_datetime({'year': df_filled['year'], 'month': df_filled['month'],
'day': df_filled['day'], 'hour': df_filled['hour'],
'minute': df_filled['minute'], 'second': df_filled['second']})
except ValueError as e:
print(f"Error creating datetime: {e}")
print(df_filled)