如何在pandas中不将date_string转换为日期?

5 浏览
0 Comments

如何在pandas中不将date_string转换为日期?

我有一个包含类似日期字符串和一些非法日期字符串的Excel文件,就像这样:\n\"my\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所以有没有一种方法可以将该列视为字符串并停止任何日期转换?

0
0 Comments

问题的原因是在读取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中进行一些转换操作,如去除小时、分钟、秒钟等,以保持日期的字符串形式。

以上就是解决这个问题的原因和方法,希望对你有帮助!

0