如何在pandas中不将date_string转换为日期?
如何在pandas中不将date_string转换为日期?
我有一个包含类似日期字符串和一些非法日期字符串的Excel文件,就像这样:\n\n我想知道如何使用pandas读取它并保持与原始数据完全相同。\n我不希望进行任何日期转换。\n我尝试了很多方法,包括:\n
df = pd.read_excel(path) df['Tran Date'] = df['Tran Date'].apply(lambda x: x.strftime('%m/%d/%y') if x else "")
\n我不想在lambda中引发异常,因为数据量很大,引发太多异常会导致严重的性能问题。\n所以有没有一种方法可以将该列视为字符串并停止任何日期转换?
问题的原因是在读取Excel文件时,使用了`pd.read_excel`函数,并且指定了`dtype`参数将'Tran Date'列的数据类型设置为了`object`,即字符串类型。然而,尽管将数据类型设置为了字符串,但在输出时,仍然将数据转换成了日期格式。
为了解决这个问题,可以使用`apply`函数对'Tran Date'列的每个元素进行处理,将其转换为所需的日期格式。具体的处理方式如下:
df['Tran Date'] = df['Tran Date'].apply(lambda x: x.rstrip('00:00:00')) df['Tran Date'] = df['Tran Date'].apply(lambda x: x.replace('-','/')) df['Tran Date'] = df['Tran Date'].apply(lambda x: (x[-3:-1]+'/'+x[-6:-4]+'/'+x[0:-7]) if (x[2] != '/') else x)
以上代码中,使用了`lambda`函数对'Tran Date'列的每个元素进行处理。首先,使用`rstrip`函数去掉每个元素末尾的'00:00:00',然后使用`replace`函数将日期中的'-'替换为'/'。最后,根据日期的具体格式,使用切片的方式重新排列日期的顺序,得到所需的日期格式。
经过上述处理后,输出的'Tran Date'列的数据将变为如下形式:
0 18/01/2020 1 18/01/2020 2 18/01/2020 3 18/01/2020 4 18/01/2020 5 18/01/2020 6 18/01/2020 7 18/01/2020 8 18/01/2020 9 18/01/2020 10 09/19/CN11 11 09/19/CN11 12 09/19/CN11 13 09/19/CN11 14 09/19/CN11 15 09/19/CN11 16 09/19/CN11 17 09/19/CN11
然而,尽管对数据进行了处理,但在输出时仍然会将日期转换成'2020-01-18 00:00:00'的格式。这是因为Excel中单元格的格式可能会影响到数据的输出。如果希望保持日期的字符串形式,可以将Excel文件另存为CSV格式,并在导入数据或保存数据时将日期保存为字符串。另外,也可以在Pandas中进行一些转换操作,如去除小时、分钟、秒钟等,以保持日期的字符串形式。
以上就是解决这个问题的原因和方法,希望对你有帮助!