我在excel文件中有下面的工作表数据:
id data_1 data_2
1 2018/11/11 00:00 123
2 123 2018/11/2 00:00excel中的日期实际上是一个浮点数,因此我希望使用以下语法将其更改为str:
df = df.astype(dtype=str)但是熊猫将日期格式YYYY/MM/DD改为YYYY-MM-DD,所以我在输出中得到了如下结果:
id data_1 data_2
1 2018-11-11 00:00 123
2 123 2018-11-2 00:00如何将所有日期更改为str并将其格式保持为YYYY/MM/DD
我无法使用df.to_datetime()或类似的语法,因为并不是所有的日期都在特定的column.And中,我不想遍历所有的列来实现它。
我知道的唯一方法是使用regex:
df.replace(['((?<=[0-9]{4})-(?=([0-9]{2}-[0-9]{2})))|((?<=[0-9]{4}-[0-9]{2})-(?=[0-9]{2}))'], ['/'], regex=True)但是,当我在其他str数据中有一个YYYY-MM-DD数据时,它会导致错误。
我只想更改工作表中的日期类型,df.astype可以这样做。唯一的问题是我想要YYYY/MM/DD而不是YYYY-MM-DD。
一般情况下,我希望将工作表中的所有日期更改为str类型。并将其格式化为YYYY/MM/DD HH:MM:SS。astype可以实现第一步。
有没有一种简单快捷的方法来实现这一目标?
以为你会读书。
发布于 2018-11-01 10:11:02
假设您有一个dataframe,它包含日期时间对象,但也有随机整数:
df = pd.DataFrame(pd.date_range(dt.datetime(2018,1,1), dt.datetime(2018,1,6)))
df[0][0] = 123
print(df)
0
0 123
1 2018-01-02
2 2018-01-03
3 2018-01-04
4 2018-01-05
5 2018-01-06现在,您可以使用df.apply和这个函数convert以所需的格式创建一个具有日期时间的新列。
def convert(x):
try:
return x.strftime('%Y/%m/%d')
except AttributeError:
return str(x)
df['date'] = df[0].apply(convert)
print(df)
0 date
0 123 123
1 2018-01-02 00:00:00 2018/01/02
2 2018-01-03 00:00:00 2018/01/03
3 2018-01-04 00:00:00 2018/01/04
4 2018-01-05 00:00:00 2018/01/05
5 2018-01-06 00:00:00 2018/01/06注意:最好先清理日期以避免意外的行为。例如,用这个
df[df[0].apply(lambda x: type(x)==pd._libs.tslibs.timestamps.Timestamp)]https://stackoverflow.com/questions/53099004
复制相似问题