Pandas read_excel 函数忽略 dtype

Too*_*ate 5 python excel pandas

我正在尝试使用 pd.read_excel() 读取 excel 文件。excel 文件有 2 列日期和时间,我想将这两列读取为 str 而不是 excel dtype。

excel文件示例

excel文件示例

我试图指定 dtype 或转换器参数无济于事。

df = pd.read_excel('xls_test.xlsx',
                   dtype={'Date':str,'Time':str})
df.dtypes
Date    object
Time    object
dtype: object
Run Code Online (Sandbox Code Playgroud)
df.head()
Date    Time
0   2020-03-08 00:00:00 10:00:00
1   2020-03-09 00:00:00 11:00:00
2   2020-03-10 00:00:00 12:00:00
3   2020-03-11 00:00:00 13:00:00
4   2020-03-12 00:00:00 14:00:00

Run Code Online (Sandbox Code Playgroud)

如您所见,Date 列不被视为 str...

使用转换器时同样的事情

df = pd.read_excel('xls_test.xlsx',
                   converters={'Date':str,'Time':str})
df.dtypes
Date    object
Time    object
dtype: object
Run Code Online (Sandbox Code Playgroud)
df.head()
Date    Time
0   2020-03-08 00:00:00 10:00:00
1   2020-03-09 00:00:00 11:00:00
2   2020-03-10 00:00:00 12:00:00
3   2020-03-11 00:00:00 13:00:00
4   2020-03-12 00:00:00 14:00:00

Run Code Online (Sandbox Code Playgroud)

我也尝试过使用其他引擎,但结果总是一样的。

dtype 参数在读取 csv 时似乎按预期工作

我在这里做错了什么?

编辑:我忘了提及,我使用的是最新版本的 Pandas 1.2.2,但在从 1.1.2 更新之前遇到了同样的问题。

小智 1

正如其他评论所说,这个问题很可能是一个错误

虽然不理想,但你总能做这样的事情吗?

import pandas as pd
#df = pd.read_excel('test.xlsx',dtype={'Date':str,'Time':str}) 
# this line can be then simplified to : 
df = pd.read_excel('test.xlsx')
df['Date'] = df['Date'].apply(lambda x: '"' + str(x) + '"')
df['Time'] = df['Time'].apply(lambda x: '"' + str(x) + '"')
print (df)
print(df['Date'].dtype)
print(df['Time'].dtype)
Run Code Online (Sandbox Code Playgroud)
                     Date        Time
0   "2020-03-08 00:00:00"  "10:00:00"
1   "2020-03-09 00:00:00"  "11:00:00"
2   "2020-03-10 00:00:00"  "12:00:00"
3   "2020-03-11 00:00:00"  "13:00:00"
4   "2020-03-12 00:00:00"  "14:00:00"
5   "2020-03-13 00:00:00"  "15:00:00"
6   "2020-03-14 00:00:00"  "16:00:00"
7   "2020-03-15 00:00:00"  "17:00:00"
8   "2020-03-16 00:00:00"  "18:00:00"
9   "2020-03-17 00:00:00"  "19:00:00"
10  "2020-03-18 00:00:00"  "20:00:00"
11  "2020-03-19 00:00:00"  "21:00:00"
object
object
Run Code Online (Sandbox Code Playgroud)