熊猫“ to_datetime”不接受系列

时间:2020-07-28 05:37:01

标签: python pandas dataframe time-series

我是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

3 个答案:

答案 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)设置为默认年份。

祝你好运