我有一个数据框,其中包含可能包含None
的列,另一个数据框具有相同的索引,其中填充了日期时间值。我正在尝试使用pandas.update
更新第一个第一个。
import numpy as np
import pandas as pd
df = pd.DataFrame([{'id': 0, 'as_of_date': np.datetime64('2017-05-08')}])
print(df.as_of_date)
df2 = pd.DataFrame([{'id': 0, 'as_of_date': None}])
print(df2.as_of_date)
df2.update(df)
print(df2.as_of_date)
print(df2.apply(lambda x: x['as_of_date'] - np.timedelta64(1, 'D'), axis=1))
这导致
0 2017-05-08
Name: as_of_date, dtype: datetime64[ns]
0 None
Name: as_of_date, dtype: object
0 1494201600000000000
Name: as_of_date, dtype: object
0 -66582 days +10:33:31.122941
dtype: timedelta64[ns]
所以基本上update
将日期时间转换为毫秒,但将类型保持为对象。然后,如果我尝试对它进行数据计算,我会得到古怪的结果,因为numpy不知道如何对待它。
我希望更新后df2
看起来像df1
。我该如何解决这个问题?
答案 0 :(得分:0)
两步法
使用df中的日期填充df2中的无数据:
df2 = df2.combine_first(df)
使用df
中的元素更新df2中的所有元素df2.update(DF)
如果没有第二步,df2将仅从df中取值来填充其Nones。