csv的默认格式为dd / mm / yyyy。当我将df['Date']=pd.to_datetime(df['Date'])
转换为datetime时,它将格式更改为mm // dd / yyyy。
然后,我使用df['Date'] = pd.to_datetime(df['Date']).dt.strftime('%d/%m/%Y')
转换为dd / mm / yyyy,但是它们是字符串(对象)格式。但是,我需要将它们更改为datetime
格式。当我再次使用此(df['Date']=pd.to_datetime(df['Date'])
)时,它恢复为以前的格式。需要您的帮助
答案 0 :(得分:2)
您可以使用parse_dates
的{{1}}和dayfirst
参数,请参阅:the docs for read_csv()
pd.read_csv
这将把df = pd.read_csv('myfile.csv', parse_dates=['Date'], dayfirst=True)
列读取为日期时间值,正确地将输入的日期的第一部分作为日期。请注意,通常,您希望将日期存储为datetime对象。
然后,如果您需要将日期输出为字符串,则可以调用Date
:
dt.strftime()
答案 1 :(得分:1)
当我再次使用以下代码:
df['Date'] = pd.to_datetime(df['Date'])
时,它将恢复为以前的格式。
否,您不能同时具有您选择的字符串格式和保持类型datetime
的系列。如here所述:
datetime
系列内部存储为整数。任何 人类可读的日期表示形式就是表示形式, 不是基础整数。要访问您的自定义格式,您可以 使用熊猫提供的方法。您甚至可以存储这样的文本pd.Series
变量中的表示形式:formatted_dates = df['datetime'].dt.strftime('%m/%d/%Y')
dtype
中的formatted_dates
将是object
,表示 系列中的元素指向任意Python时间。在 在这种情况下,那些任意类型恰好都是字符串。最后,我强烈建议您不转换
datetime
系列 到字符串,直到工作流程的最后一步。这是因为 一旦这样做,您将不再能够使用高效, 如此系列的向量化运算。
答案 2 :(得分:0)
此解决方案适用于列具有混合日期格式的所有情况。如果需要,可以向函数添加更多条件。熊猫的to_datetime()函数不适用于我,但这似乎很好用。
import date
def format(val):
a = pd.to_datetime(val, errors='coerce', cache=False).strftime('%m/%d/%Y')
try:
date_time_obj = datetime.datetime.strptime(a, '%d/%m/%Y')
except:
date_time_obj = datetime.datetime.strptime(a, '%m/%d/%Y')
return date_time_obj.date()
将更改保存到同一列。
df['Date'] = df['Date'].apply(lambda x: format(x))
另存为CSV。
df.to_csv(f'{file_name}.csv', index=False, date_format='%s')