簡體   English   中英

帶有python本機日期時間類型而不是時間戳的pandas to_dict

[英]pandas to_dict with python native datetime type and not timestamp

我有一個pandas DataFrame df包含Timesatamp列。

我希望從df創建一個行迭代器(通過iter..方法或通過to_dict ),其中Timesatamp值是 python datetime

我試過這樣做

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

但是,在使用上述迭代器方法時,列似乎仍然是Timesatamp 除了在迭代時手動轉換每個值之外,是否有一種“批量”方式來實現這一點?


例子

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}]

你可以試試

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

代替

df[col] = df[col].dt.to_pydatetime()

一種解決方法如下:

#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)}]

嘗試一下:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM