熊猫:转换日期'对象'到int

时间:2018-06-14 18:22:33

标签: python pandas type-conversion

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

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):

TypeError:int()参数必须是字符串,类字节对象或数字,而不是&#39; datetime.date&#39;

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

TypeError:位置0处的对象类型无效

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

ValueError:基数为10的int()的无效文字:&#39; 2014-03-29&#39;

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

将整个列转换为NaN

3 个答案:

答案 0 :(得分:6)

test_df['Date'].astype(int)给出错误的原因是您的日期仍然包含连字符&#34; - &#34;。首先通过执行test_df['Date'].str.replace("-","")来抑制它们,然后您可以将第一个方法应用于结果系列。所以整个解决方案将是:

test_df['Date'].str.replace("-","").astype(int) 请注意,如果你的&#34; 日期&#34;这不会起作用。 column不是字符串对象,通常在Pandas已将您的系列解析为TimeStamp时。在这种情况下,您可以使用:

test_df['Date'].dt.strftime("%Y%m%d").astype(int)

答案 1 :(得分:1)

您似乎需要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

答案 2 :(得分:0)

这应该有效

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