我的dataframe有一个DOB列(示例格式**1/1/2016),默认情况下转换为Pandas dtype 'object'。使用df['DOB'] = pd.to_datetime(df['DOB'])将其转换为日期格式,日期将转换为:2016-01-26,其dtype为:datetime64[ns]。现在我想将此日期格式转换为01/26/2016或任何其他常规日期格式**。我该怎么做?(无论我尝试什么方法,它总是以2016-01-26显示日期。)
DOB
1/1/2016
df['DOB'] = pd.to_datetime(df['DOB'])
2016-01-26
dtype
datetime64[ns]
01/26/2016
w9apscun1#
如果需要将datetime转换为其他格式,可以使用dt.strftime(但请注意,列的dtype将是object(string)):
datetime
dt.strftime
object
string
import pandas as pd df = pd.DataFrame({'DOB': {0: '26/1/2016', 1: '26/1/2016'}}) print (df) DOB 0 26/1/2016 1 26/1/2016 df['DOB'] = pd.to_datetime(df.DOB) print (df) DOB 0 2016-01-26 1 2016-01-26 df['DOB1'] = df['DOB'].dt.strftime('%m/%d/%Y') print (df) DOB DOB1 0 2016-01-26 01/26/2016 1 2016-01-26 01/26/2016
z9smfwbn2#
更改格式但不更改类型:
df['date'] = pd.to_datetime(df["date"].dt.strftime('%Y-%m'))
btqmn9zl3#
之间有区别
所以问题是:如何在不更改数据/数据类型本身的情况下实现数据的适当表示?答案如下:
id
class
使用 * styling *。样式化不会改变数据框的数据/数据类型。现在,我将向您展示如何在Jupyter notebook中访问它-对于HTML文件形式的演示,请参阅本答案结尾处的注解。我假设你的列DOB * 已经有datetime64类型 *(你已经表明你知道如何到达它)。我准备了一个简单的dataframe(只有一列)来展示一些基本的样式:
datetime64
df
DOB 0 2019-07-03 1 2019-08-03 2 2019-09-03 3 2019-10-03
mm/dd/yyyy
df.style.format({"DOB": lambda t: t.strftime("%m/%d/%Y")})
DOB 0 07/03/2019 1 08/03/2019 2 09/03/2019 3 10/03/2019
dd-mm-yyyy
df.style.format({"DOB": lambda t: t.strftime("%d-%m-%Y")})
DOB 0 03-07-2019 1 03-08-2019 2 03-09-2019 3 03-10-2019
小心!*返回的对象不是一个dataframe -它是类Styler的对象,所以 * 不要将它赋值回df:*
Styler
不要这样做:
df = df.style.format({"DOB": lambda t: t.strftime("%m/%d/%Y")}) # Don't do this!
(每个dataframe都有其Styler对象,可以通过其.style属性访问,我们更改了这个df.style对象,而不是dataframe本身。
.style
df.style
问题和答案:*Q:为什么你的Styler对象(或返回它的表达式)在Jupyter notebook单元格中用作最后一个命令时会显示你的(样式化的)表,而不是Styler对象本身?***A:**因为每个Styler对象都有一个回调方法._repr_html_(),它返回一个HTML代码来渲染你的 Dataframe (作为一个漂亮的HTML表)。
._repr_html_()
Jupyter Notebook IDE会自动调用这个方法来渲染拥有它的对象。
注:
你不需要Jupyter notebook来进行样式化(即,在不更改其数据/数据类型的情况下很好地输出dataframe *)。Styler对象也有一个方法render(),如果你想用HTML代码获取一个字符串(例如,在Web上发布格式化的 Dataframe ,或者只是以HTML格式显示表格):
render()
df_styler = df.style.format({"DOB": lambda t: t.strftime("%m/%d/%Y")}) HTML_string = df_styler.render()
mu0hgdu04#
与第一个答案相比,我建议先使用dt.strftime(),然后再使用pd.to_datetime()。这样,它仍然会导致datetime数据类型。比如说
dt.strftime()
pd.to_datetime()
import pandas as pd df = pd.DataFrame({'DOB': {0: '26/1/2016 ', 1: '26/1/2016 '}) print(df.dtypes) df['DOB1'] = df['DOB'].dt.strftime('%m/%d/%Y') print(df.dtypes) df['DOB1'] = pd.to_datetime(df['DOB1']) print(df.dtypes)
fquxozlt5#
下面的代码为我工作,而不是前一个:
df['DOB']=pd.to_datetime(df['DOB'].astype(str), format='%m/%d/%Y')
ffx8fchx6#
你可以试试这个它会将日期格式转换为DD-MM-YYYY:
df['DOB'] = pd.to_datetime(df['DOB'], dayfirst = True)
v9tzhpje7#
下面的代码将更改为“datetime”类型,并以给定的格式字符串进行格式化。
df['DOB'] = pd.to_datetime(df['DOB'].dt.strftime('%m/%d/%Y'))
r7xajy2e8#
下面是我的代码。我们需要非常小心的格式。下面的链接对于了解您现有的格式和更改为所需的格式绝对有用(遵循 * strftime()和strptime()Behavior* 中的strftime()和strptime()格式代码):
data['date_new_format'] = pd.to_datetime(data['date_to_be_changed'] , format='%b-%y')
8条答案
按热度按时间w9apscun1#
如果需要将
datetime
转换为其他格式,可以使用dt.strftime
(但请注意,列的dtype
将是object
(string
)):z9smfwbn2#
更改格式但不更改类型:
btqmn9zl3#
之间有区别
所以问题是:如何在不更改数据/数据类型本身的情况下实现数据的适当表示?
答案如下:
id
和class
属性用于 * 进一步 * CSS样式-你可能会使用,也可能不会使用它们),使用 * styling *。样式化不会改变数据框的数据/数据类型。
现在,我将向您展示如何在Jupyter notebook中访问它-对于HTML文件形式的演示,请参阅本答案结尾处的注解。
我假设你的列
DOB
* 已经有datetime64
类型 *(你已经表明你知道如何到达它)。我准备了一个简单的dataframe(只有一列)来展示一些基本的样式:mm/dd/yyyy
:dd-mm-yyyy
:小心!*
返回的对象不是一个dataframe -它是类
Styler
的对象,所以 * 不要将它赋值回df
:*不要这样做:
(每个dataframe都有其Styler对象,可以通过其
.style
属性访问,我们更改了这个df.style
对象,而不是dataframe本身。问题和答案:
*Q:为什么你的Styler对象(或返回它的表达式)在Jupyter notebook单元格中用作最后一个命令时会显示你的(样式化的)表,而不是Styler对象本身?
***A:**因为每个Styler对象都有一个回调方法
._repr_html_()
,它返回一个HTML代码来渲染你的 Dataframe (作为一个漂亮的HTML表)。Jupyter Notebook IDE会自动调用这个方法来渲染拥有它的对象。
注:
你不需要Jupyter notebook来进行样式化(即,在不更改其数据/数据类型的情况下很好地输出dataframe *)。
Styler对象也有一个方法
render()
,如果你想用HTML代码获取一个字符串(例如,在Web上发布格式化的 Dataframe ,或者只是以HTML格式显示表格):mu0hgdu04#
与第一个答案相比,我建议先使用
dt.strftime()
,然后再使用pd.to_datetime()
。这样,它仍然会导致datetime数据类型。比如说
fquxozlt5#
下面的代码为我工作,而不是前一个:
ffx8fchx6#
你可以试试这个它会将日期格式转换为DD-MM-YYYY:
v9tzhpje7#
下面的代码将更改为“datetime”类型,并以给定的格式字符串进行格式化。
r7xajy2e8#
下面是我的代码。我们需要非常小心的格式。下面的链接对于了解您现有的格式和更改为所需的格式绝对有用(遵循 * strftime()和strptime()Behavior* 中的strftime()和strptime()格式代码):