Pandas:将日期“object”转换为整数

14

我有一个Pandas数据框,需要将一个日期列转换为整数,但不幸的是所有给出的解决方案都会出现错误(如下所示)

我有一个 Pandas 数据框,需要将一个日期列转换为整数,但不幸的是,所有给出的解决方案最终都出现了错误(如下所示)

test_df.info()

<class 'pandas.core.frame.DataFrame'>
Data columns (total 4 columns):
Date        1505 non-null object
Avg         1505 non-null float64
TotalVol    1505 non-null float64
Ranked      1505 non-null int32
dtypes: float64(2), int32(1), object(1) 

示例数据:

    Date        Avg             TotalVol  Ranked
0   2014-03-29  4400.000000     0.011364    1
1   2014-03-30  1495.785714     4.309310    1
2   2014-03-31  1595.666667     0.298571    1
3   2014-04-01  1523.166667     0.270000    1
4   2014-04-02  1511.428571     0.523792    1

我认为我已经尝试了所有的方法,但都没有奏效。

test_df['Date'].astype(int):

类型错误:int()参数必须为字符串、类似字节的对象或数字,而不是'datetime.date'

test_df['Date']=pd.to_numeric(test_df['Date']):

类型错误:位置 0 的对象类型无效

test_df['Date'].astype(str).astype(int):

数值错误: 使用十进制将'2014-03-29'转换为整数时无效

test_df['Date'].apply(pd.to_numeric, errors='coerce'):

将整列转换为NaN


您希望通过将日期转换为整数获得什么?自1970年1月1日以来的天数?月份的整数表示?不带连字符的字符串表示形式拼接在一起?如果我们不知道,Pandas如何知道您想从此操作中获得什么? - TayTay
你期望的是什么类型的整数?例如,2014-03-29 应该是什么,2014-03-30 应该是什么? - sacuL
期望的输出是一个字符串表示,没有连字符全部连接在一起。 - jabba
3个回答

18
test_df['Date'].astype(int) 出错的原因是你的日期仍然包含连字符 "-"。首先通过 test_df['Date'].str.replace("-","") 去除它们,然后再将你的第一种方法应用于结果系列。所以整个解决方案如下:
test_df['Date'].str.replace("-","").astype(int)

请注意,如果您的“日期”列不是字符串对象,通常是因为Pandas已经将您的系列解析为时间戳,那么这种方法将无法奏效。在这种情况下,您可以使用以下方法:
test_df['Date'].dt.strftime("%Y%m%d").astype(int)

11

看起来你需要使用 pd.to_datetime().dt.strftime("%Y%m%d")

演示:

import pandas as pd
df = pd.DataFrame({"Date": ["2014-03-29", "2014-03-30", "2014-03-31"]})
df["Date"] = pd.to_datetime(df["Date"]).dt.strftime("%Y%m%d")
print( df )

输出:

       Date
0  20140329
1  20140330
2  20140331

0

这应该可以工作

df['Date'] = pd.to_numeric(df.Date.str.replace('-',''))
print(df['Date'])
0    20140329
1    20140330
2    20140331
3    20140401
4    20140402

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接