我有一个包含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}]

最佳答案

你可以试试

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

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

09-25 17:07
查看更多