熊猫使用Python日期时间而不是时间戳记to_dict

时间:2019-11-24 10:27:43

标签: python pandas timestamp python-datetime

我有一个pandas DataFrame df,其中包含Timesatamp列。

我希望从iter..创建行的迭代器(通过to_dict方法或通过df),其中Timesatamp的值是python datetime

我尝试这样做

for col in df.select_dtypes(['datetime']):
        df[col] = df[col].dt.to_pydatetime()

但是,使用上述迭代器方法时,列似乎仍然是Timesatamp。 除了在迭代时手动转换每个值之外,是否有'batch'y 方法来实现这一目标?


示例

df = pd.DataFrame({'d': pd.date_range('2018-01-01', freq='12h', periods=2), 'a':[1,2]})
for col in df.select_dtypes(['datetime']):
    df[col] = df[col].dt.to_pydatetime()
print(df.to_dict('records'))

输出:

[{'d': Timestamp('2018-01-01 00:00:00'), 'a': 1}, {'d': Timestamp('2018-01-01 12:00:00'), 'a': 2}]

所需的输出:

[{'d': datetime.datetime(2018, 1, 1, 0, 0), 'a': 1}, {'d': datetime.datetime(2018, 1, 1, 12, 0), 'a': 2}]

3 个答案:

答案 0 :(得分:1)

您可以尝试

git init

代替

df[col] = pd.Series(df[col].dt.to_pydatetime(), dtype = object)

答案 1 :(得分:0)

以下是一种解决方法:

#Initialize empty records list
records=[]

#Iterate over datetime columns
for col in df.select_dtypes(['datetime']):

    #Create a temp list consisting of dictionaries
    temp_df=[{col: r.to_pydatetime()} for r in df[col]]

    #Add it to records
    records+=temp_df

其结果是:

records

[{'d': datetime.datetime(2018, 1, 1, 0, 0)},
 {'d': datetime.datetime(2018, 1, 2, 0, 0)}]

答案 2 :(得分:0)

尝试一下:

df["d"]=df.d.apply(lambda t: t.date())                                                                              
df.d.to_dict()                                                                                                      

{0: datetime.date(2018, 1, 1), 1: datetime.date(2018, 1, 2)}