我正在制作一个脚本来打印一些标签,并需要导入一个带有身份证号码和DOB的excell文件。DOB已经在电子表格中正确格式化,但当我将其导入到数据帧中时,它会将其转换为日期时间并添加时间戳。
电子表格输入
IDS DOB
1 10/21/18
然后是下面的代码
df = pd.read_excel(file,sheetname = "Sheet1",dtype=str )
给出了此DataFrame输出
IDS DOB
1 2018-10-21 00:00:00
即使我告诉它作为字符串导入。
有些行没有don或注释,所以当我尝试使用apply函数时,比如
df['DOB'] = df['DOB'].apply(lambda x: dt.datetime.strptime(x,'%D%M%Y'))
我得到了
ValueError: unconverted data remains: -10-10 00:00:00
当我尝试的时候
df['DOB'] = pd.to_datetime(df['DOB'],format="%m/%d/%Y")
它仍然输出为
2018-10-21 00:00:00
发布于 2020-06-26 08:04:55
如果所有日期都是字符串,那么可以将其转换为日期时间,并再次将其格式化为字符串
df['DOB'] = pd.to_datetime(df['DOB']).dt.strftime('%m/%d/%y')
最小工作示例
import pandas as pd
df = pd.DataFrame({
'IDS': [1],
'DOB': ['2018-10-21 00:00:00'],
})
print(df)
df['DOB'] = pd.to_datetime(df['DOB']).dt.strftime('%m/%d/%y')
print(df)
如果还有其他字符串,那么当您尝试转换这些值并返回原始字符串时,您可能需要使用try/except
来捕获错误的函数。
import pandas as pd
df = pd.DataFrame({
'IDS': [1, 2],
'DOB': ['2018-10-21 00:00:00', 'Hello World'],
})
print('\n--- before ---\n')
print(df)
def convert(value):
try:
return pd.to_datetime(value).strftime('%m/%d/%y')
except Exception as ex:
print(ex)
return value
df['DOB'] = df['DOB'].apply(convert)
print('\n--- after ---\n')
print(df)
结果:
--- before ---
IDS DOB
0 1 2018-10-21 00:00:00
1 2 Hello World
('Unknown string format:', 'Hello World')
--- after ---
IDS DOB
0 1 10/21/18
1 2 Hello World
BTW:我没有测试用的convert()
文件,但是如果你在read_excel
中使用这个带有parse_dates
的Excel文件,那么当你读取文件时,它就会转换它。
https://stackoverflow.com/questions/62585031
复制相似问题