将列转换为日期格式(Pandas 数据框)
Convert Column to Date Format (Pandas Dataframe)
我有一个 pandas 数据框如下:
Symbol Date
A 02/20/2015
A 01/15/2016
A 08/21/2015
我想按 Date
排序,但该列只是 object
.
我试图将列设为日期对象,但我 运行 遇到了一个问题,即该格式不是所需的格式。需要的格式是2015-02-20,
等
所以现在我想弄清楚如何让 numpy 将 'American' 日期转换为 ISO 标准,这样我就可以使它们成为日期对象,这样我就可以按它们进行排序。
我如何将这些美国日期转换为 ISO 标准,或者我在 pandas 中缺少更直接的方法?
您可以使用 pd.to_datetime()
转换为日期时间对象。它需要一个格式参数,但在你的情况下我认为你不需要它。
>>> import pandas as pd
>>> df = pd.DataFrame( {'Symbol':['A','A','A'] ,
'Date':['02/20/2015','01/15/2016','08/21/2015']})
>>> df
Date Symbol
0 02/20/2015 A
1 01/15/2016 A
2 08/21/2015 A
>>> df['Date'] =pd.to_datetime(df.Date)
>>> df.sort('Date') # This now sorts in date order
Date Symbol
0 2015-02-20 A
2 2015-08-21 A
1 2016-01-15 A
为了以后的搜索,您可以更改排序语句:
>>> df.sort_values(by='Date') # This now sorts in date order
Date Symbol
0 2015-02-20 A
2 2015-08-21 A
1 2016-01-15 A
快速简洁。但它会更改您尝试排序的 DataFrame
,您可能想要也可能不想要。
(注意:你几乎肯定会想要它,因为你的日期列应该是日期,而不是字符串!)
万一您不想将日期更改为日期,您也可以采用不同的方式。
首先,从已排序的 Date
列中获取索引:
In [25]: pd.to_datetime(df.Date).order().index
Out[25]: Int64Index([0, 2, 1], dtype='int64')
然后用它来索引您的原件 DataFrame
,保持原样:
In [26]: df.ix[pd.to_datetime(df.Date).order().index]
Out[26]:
Date Symbol
0 2015-02-20 A
2 2015-08-21 A
1 2016-01-15 A
魔法!
注意: 对于 Pandas 版本 0.20.0 及更高版本,使用 loc
而不是现已弃用的 ix
。
sort
方法已 deprecated and replaced with sort_values
。使用 df['Date']=pd.to_datetime(df['Date'])
转换为日期时间对象后
df.sort_values(by=['Date'])
注意:要对in-placeand/or进行降序排序(最近的在前):
df.sort_values(by=['Date'], inplace=True, ascending=False)
可以使用以下代码读取包含日期列的数据:
data = pd.csv(file_path,parse_dates=[date_column])
使用上述代码行读取数据后,可以使用 pd.date_time()
访问包含日期信息的列,例如:
pd.date_time(data[date_column], format = '%d/%m/%y')
根据需要更改日期格式。
因为 pandas >= 1.0.0
我们在 DataFrame.sort_values
中有 key
参数。这样我们就可以通过指定一个键对数据帧进行排序,而无需调整原始数据帧:
df.sort_values(by="Date", key=pd.to_datetime)
Symbol Date
0 A 02/20/2015
2 A 08/21/2015
1 A 01/15/2016
data['Date'] = data['Date'].apply(pd.to_datetime) # non-null datetime64[ns]
我有一个 pandas 数据框如下:
Symbol Date
A 02/20/2015
A 01/15/2016
A 08/21/2015
我想按 Date
排序,但该列只是 object
.
我试图将列设为日期对象,但我 运行 遇到了一个问题,即该格式不是所需的格式。需要的格式是2015-02-20,
等
所以现在我想弄清楚如何让 numpy 将 'American' 日期转换为 ISO 标准,这样我就可以使它们成为日期对象,这样我就可以按它们进行排序。
我如何将这些美国日期转换为 ISO 标准,或者我在 pandas 中缺少更直接的方法?
您可以使用 pd.to_datetime()
转换为日期时间对象。它需要一个格式参数,但在你的情况下我认为你不需要它。
>>> import pandas as pd
>>> df = pd.DataFrame( {'Symbol':['A','A','A'] ,
'Date':['02/20/2015','01/15/2016','08/21/2015']})
>>> df
Date Symbol
0 02/20/2015 A
1 01/15/2016 A
2 08/21/2015 A
>>> df['Date'] =pd.to_datetime(df.Date)
>>> df.sort('Date') # This now sorts in date order
Date Symbol
0 2015-02-20 A
2 2015-08-21 A
1 2016-01-15 A
为了以后的搜索,您可以更改排序语句:
>>> df.sort_values(by='Date') # This now sorts in date order
Date Symbol
0 2015-02-20 A
2 2015-08-21 A
1 2016-01-15 A
DataFrame
,您可能想要也可能不想要。
(注意:你几乎肯定会想要它,因为你的日期列应该是日期,而不是字符串!)
万一您不想将日期更改为日期,您也可以采用不同的方式。
首先,从已排序的 Date
列中获取索引:
In [25]: pd.to_datetime(df.Date).order().index
Out[25]: Int64Index([0, 2, 1], dtype='int64')
然后用它来索引您的原件 DataFrame
,保持原样:
In [26]: df.ix[pd.to_datetime(df.Date).order().index]
Out[26]:
Date Symbol
0 2015-02-20 A
2 2015-08-21 A
1 2016-01-15 A
魔法!
注意: 对于 Pandas 版本 0.20.0 及更高版本,使用 loc
而不是现已弃用的 ix
。
sort
方法已 deprecated and replaced with sort_values
。使用 df['Date']=pd.to_datetime(df['Date'])
df.sort_values(by=['Date'])
注意:要对in-placeand/or进行降序排序(最近的在前):
df.sort_values(by=['Date'], inplace=True, ascending=False)
可以使用以下代码读取包含日期列的数据:
data = pd.csv(file_path,parse_dates=[date_column])
使用上述代码行读取数据后,可以使用 pd.date_time()
访问包含日期信息的列,例如:
pd.date_time(data[date_column], format = '%d/%m/%y')
根据需要更改日期格式。
因为 pandas >= 1.0.0
我们在 DataFrame.sort_values
中有 key
参数。这样我们就可以通过指定一个键对数据帧进行排序,而无需调整原始数据帧:
df.sort_values(by="Date", key=pd.to_datetime)
Symbol Date
0 A 02/20/2015
2 A 08/21/2015
1 A 01/15/2016
data['Date'] = data['Date'].apply(pd.to_datetime) # non-null datetime64[ns]