我是pandas的新手,正在尝试将日期格式为'%d%B'(01 January,02 January ....)的字符串列转换为日期时间对象,并且该列的类型为<class 'pandas.core.series.Series'>
。
如果我以to_datetime方法传递该系列,例如
print(pd.to_datetime(data_file['Date'], format='%d %B', errors="coerce"))
所有条目都返回NaT
,并返回日期时间对象
我检查了文档,并说它接受Series对象。
有什么办法解决这个问题?
编辑1: 这是我正在使用的数据的标题:
Date Daily Confirmed
0 30 January 1
1 31 January 0
2 01 February 0
3 02 February 1
4 03 February 1
编辑2:这是数据信息
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 179 entries, 0 to 178
Data columns (total 2 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Date 179 non-null object
1 Daily Confirmed 179 non-null int64
dtypes: int64(1), object(1)
memory usage: 2.2+ KB
答案 0 :(得分:1)
如果我的理解正确,您可能会遇到此问题,因为此列中的日期周围有空格。要解决此问题,请在strip
之前使用to_datetime
。这是执行此操作的一段代码:
df = pd.DataFrame({'Date':
['30 January ', '31 January ', ' 01 February ', '02 February',
'03 February'], 'Daily Confirmed': [1, 0, 0, 1, 1]})
pd.to_datetime(df.Date.str.strip(), format = "%d %B")
输出为:
0 1900-01-30
1 1900-01-31
2 1900-02-01
...
答案 1 :(得分:1)
@font-face {
font-family: 'pvlolzicons';
src:
url('fonts/pvlolzicons.ttf?ur0pfm') format('truetype'),
url('fonts/pvlolzicons.woff?ur0pfm') format('woff'),
url('fonts/pvlolzicons.svg?ur0pfm#pvlolzicons') format('svg');
font-weight: normal;
font-style: normal;
font-display: block;
}
默认情况下,它包含的年份为1900。因为您没有在数据框上提供年份 输出:
import pandas as pd
dic = {"Date": ["30 January", "31 January", "01 February", ] , "Daily Confirmed":[0,1,0]}
df =pd.DataFrame(dic)
df['date1'] = pd.to_datetime(df['Date'].astype(str), format='%d %B')
df
如果您不希望年份作为日期前缀。请添加以下代码:
Date Daily Confirmed date1
0 30 January 0 1900-01-30
1 31 January 1 1900-01-31
2 01 February 0 1900-02-01
df['date2']=df['date1'].dt.strftime('%d-%m')
df
谢谢
答案 2 :(得分:0)
您可以尝试以下方法:
from datetime import datetime
df['datetime'] = df['date'].apply(lambda x: datetime.strptime(x, "%d %B"))
apply()允许您串联使用python函数,在这里您可能必须指定年份,否则将默认年份(1900)设置为默认年份。
祝你好运