Pandas中使用rstrip无法移除CSV日期时间时分秒问题求助
解决CSV日期中移除时间部分的问题
嘿,我明白你的困扰——用rstrip没生效确实让人头疼,其实是因为rstrip的工作方式和你想的不一样!咱们一步步来解决这个问题:
为什么rstrip没用?
rstrip()是从字符串末尾逐个移除指定的字符,而不是移除整个子串。比如你用"1/12/2011 0:00".rstrip("0:00"),它会把末尾的0、:、0逐个去掉,最后剩下"1/12/2011 "(还留了个空格),完全达不到移除时间部分的效果。
靠谱的解决方案分两种情况:
1. 用Pandas处理(推荐,更稳定)
如果你用Pandas处理CSV,直接把日期列转成日期类型就能自动去掉时间,比字符串处理靠谱得多:
import pandas as pd # 读取CSV时直接解析目标日期列 df = pd.read_csv('your_file.csv', parse_dates=['日期列1', '日期列2']) # 把datetime类型转为纯date类型,自动丢掉时间部分 df['日期列1'] = df['日期列1'].dt.date df['日期列2'] = df['日期列2'].dt.date # 保存处理后的CSV df.to_csv('processed_file.csv', index=False)
如果读取时没解析日期,也可以先转换:
df['日期列'] = pd.to_datetime(df['日期列']).dt.date
2. 用原生CSV模块处理(字符串操作)
如果不用Pandas,就直接按空格分割字符串,取前面的日期部分:
import csv # 打开输入和输出文件 with open('input.csv', 'r', encoding='utf-8') as infile, \ open('output.csv', 'w', newline='', encoding='utf-8') as outfile: reader = csv.reader(infile) writer = csv.writer(outfile) # 先写表头 writer.writerow(next(reader)) # 处理每一行 for row in reader: # 假设第0、2列是需要处理的日期列,根据你的实际列索引调整 for col_idx in [0, 2]: # 按空格分割,只取第一部分(日期) date_part = row[col_idx].split(' ', 1)[0] row[col_idx] = date_part writer.writerow(row)
这里用split(' ', 1)是为了避免万一日期里有空格(虽然很少见),只分割一次,确保只取到日期部分。
小提示
尽量优先用日期类型处理,而不是字符串操作——如果你的CSV里时间格式有变化(比如有的是1:30 PM),字符串分割可能失效,但日期类型转换能自动适配各种合法格式。
内容的提问来源于stack exchange,提问作者New_to_Python
相关产品推荐
相关产品推荐

