我正在读入数据帧的csv文件中的日期数据格式为dd-mm-yyyy
即
12-02-2017 23:37:45
12-02-2017 23:52:17
13-02-2017 00:02:28
使用以下代码读取csv文件:
data = pd.read_csv(filename, header=header, engine='c', error_bad_lines=False)
数据框包含格式为
的日期2017-12-02T23:37:45
2017-12-02T23:52:17
2017-02-13T00:02:28
即熊猫似乎假设输入是mm-dd-yyyy,直到一个月不适合然后翻转到dd-mm-yyyy假设。
我也尝试过:
date_parser = pd.datetools.to_datetime
data = pd.read_csv(filename, header=header, parse_dates=True, infer_datetime_format=True, date_parser=date_parser, engine='c', error_bad_lines=False)
结果相同。
问题是用户可以使用mm-dd-yyyy或dd-mm-yyyy格式上传数据。
我可以在文本文件中读取并运行一些手动Python字符串检查,但有没有办法用Pandas自动执行此操作?
答案 0 :(得分:0)
执行此操作的一种方法是读取csv文件,使用dateutil使用默认的dayfirst = True解析日期。
请注意,我在用户输入屏幕上添加了一个单选框,以确定日期是日期还是月份。
通过在pd.read_csv()中设置dayfirst = True可以实现类似,但是我使用索引列作为日期列时出现了pandas问题。
日期从csv读取并使用:
转换def extract_clean_dates_from_csv(self, file_path, contains_header, date_col, day_first):
with open(file_path, "r") as f:
reader = csv.reader(f)
reader_list = list(reader)
parsed_dates = self.convert_dates(reader_list, contains_header, date_col, day_first)
return parsed_dates
def convert_dates(self, reader_list, contains_header, date_col, day_first):
parsed_dates = []
headline = True
for row in reader_list:
if (headline and contains_header):
headline = False
continue
parsed_date = parse(row[date_col], dayfirst=day_first)
parsed_dates.append(parsed_date)
return parsed_dates
然后我只用新解析的日期替换了数据框原始日期列:
df.iloc[:, date_col] = parsed_dates