假设我有一个 Dataframe ,其中第一列是日期时间,其他列是指定日期时间中的数据(每小时收集一次数据,因此每行的第一列都比前一行晚一个小时)。在这个 Dataframe 中,一些日期时间的数据丢失。我想创建一个新的 Dataframe ,其中丢失的行被替换为其他列的相关日期时间和NaN。
我尝试从csv中读取 Dataframe 作为第一个DF,并在循环中创建一个空DF,以按时间顺序为每个小时创建日期时间,然后我从第一个DF中获取数据并将其放入第二个DF,如果第一个DF中没有指定日期时间的数据,我将NaN放入该行。
这对我来说很有效,但是它非常慢,需要3天的时间来运行70000行,我想有一个高效的方法来完成这个任务。
我想有一个更好的方法,如this one,但我需要它的日期时间。
我正在寻找一个类似Replacing one data frame value from another based on timestamp Criterion的答案,但只包含日期时间。
2条答案
按热度按时间abithluo1#
我认为你可以创建一个df,其中你有时间戳作为你的索引。
然后,您可以使用
pd.date_range
为每小时创建一个完整的日期时间范围(从最小值到最大值)。然后,您可以运行
Index.difference
来有效地查找原始 Dataframe 中丢失的任何时间戳--〉这将是具有丢失值的新df的索引。然后用
NaN
填写缺失的列vd2z7a6w2#
我不确定我是否完全符合您的要求,即您尝试完成日期时间的频率是多少,但假设是每小时一次,那么您可以尝试以下内容:
1.使用pandas中的
pd.date_range(start_date, end_date, freq='H')
函数创建一个pandas DataFrame,其中包含您需要的所有缺失的每小时时间(一列,名称与初始DataFrame中的第一列相同)。https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.date_range.html1.使用
pd.merge(initial_df, complete_df, how='outer')
函数在两个 Dataframe 之间执行外部合并。如果我没有弄错的话,在初始 Dataframe 中没有日期的所有列都应该默认填充NA。下面使用Matt的示例重现示例: