简体   繁体   English

Pandas:在 Pandas dataframe 中填写缺失的日期

[英]Pandas: Fill missing dates in Pandas dataframe

How do I fill the Date column so that when it detects a date it adds that date to the below rows, until it sees a new date starts adding that date?如何填充日期列,以便在检测到日期时将该日期添加到下面的行中,直到它看到新日期开始添加该日期?

Reproducible example:可重现的例子:

Input:输入:


                Date                                           Headline
0   Mar-20-21 04:03AM  Apple CEO Cook, executives on tentative list o...
1             03:43AM  Apple CEO Cook, execs on tentative list of wit...
2   Mar-19-21 10:19PM  Dow Jones Futures: Why This Market Rally Is So...
3             06:13PM  Zuckerberg: Apples Privacy Move Could Spur Mor...
4             05:45PM  Apple (AAPL) Dips More Than Broader Markets: W...
5             04:17PM  Facebook Stock Jumps As Zuckerberg Changes Tun...
6             04:03PM  Best Dow Jones Stocks To Buy And Watch In Marc...
7             01:02PM  The Nasdaq's on the Rise Friday, and These 2 S...

Desired Output:所需的 Output:


                 Date                                           Headline
0   Mar-20-21 04:03AM  Apple CEO Cook, executives on tentative list o...
1   Mar-20-21 03:43AM  Apple CEO Cook, execs on tentative list of wit...
2   Mar-19-21 10:19PM  Dow Jones Futures: Why This Market Rally Is So...
3   Mar-19-21 06:13PM  Zuckerberg: Apples Privacy Move Could Spur Mor...
4   Mar-19-21 05:45PM  Apple (AAPL) Dips More Than Broader Markets: W...
5   Mar-19-21 04:17PM  Facebook Stock Jumps As Zuckerberg Changes Tun...
6   Mar-19-21 04:03PM  Best Dow Jones Stocks To Buy And Watch In Marc...
7   Mar-19-21 01:02PM  The Nasdaq's on the Rise Friday, and These 2 S...

Attempt:试图:

df['Time'] = [x[-7:] for x in df['Date']]
df['Date'] = [x[:-7] for x in df['Date']]
# Some code that fills the date
# Then convert to datetime

Before you use ffill() you need to split the two columns to get the correct time, and only fill in the Date part.在使用ffill()之前,您需要拆分两列以获得正确的时间,并且只填写 Date 部分。 You will need to replace spaces with np.nan to use ffill() .您需要用np.nan替换空格才能使用ffill() Then put the columns back together and wrap that operation in pd.to_datetime to get the correct dtype .然后将列重新组合在一起并将该操作包装在pd.to_datetime以获得正确的dtype

Lastly you can drop the time column.最后,您可以删除时间列。

# Imports
import numpy as np
import pandas as pd

# Split the column
df[['Date','Time']] = df['Date'].str.split(' ',expand=True)

# Replace space with nan and use ffill()
df['Date'] = df['Date'].replace(r'^\s*$', np.nan, regex=True).ffill()

# Put the columns back and convert to datetime
df['Date'] =  pd.to_datetime(df['Date'] + ' ' + df['Time'])

# Drop the time column
del(df['Time'])

Will get you back:会让你回来:

df
                 Date                                           Headline
0 2021-03-20 04:03:00  Apple CEO Cook, executives on tentative list o...
1 2021-03-20 03:43:00  Apple CEO Cook, execs on tentative list of wit...
2 2021-03-19 22:19:00  Dow Jones Futures: Why This Market Rally Is So...
3 2021-03-19 18:13:00  Zuckerberg: Apples Privacy Move Could Spur Mor...
4 2021-03-19 17:45:00  Apple (AAPL) Dips More Than Broader Markets: W...
5 2021-03-19 16:17:00  Facebook Stock Jumps As Zuckerberg Changes Tun...
6 2021-03-19 16:03:00  Best Dow Jones Stocks To Buy And Watch In Marc...
7 2021-03-19 13:02:00  The Nasdaq's on the Rise Friday, and These 2 S...

EDIT If you want your 'Date' to show exactly as you have it in your desired outcome, ie this format 'Mar-20-21', don't wrap it in pd.to_datetime() and keep it as an object :编辑如果您希望您的“日期”完全按照您想要的结果显示,即这种格式“Mar-20-21”,请不要将其包装在pd.to_datetime()中并将其保留为object

df['Date'] =  df['Date'] + ' ' + df['Time']

df
                Date                                           Headline
0  Mar-20-21 04:03AM  Apple CEO Cook, executives on tentative list o...
1  Mar-20-21 03:43AM  Apple CEO Cook, execs on tentative list of wit...
2  Mar-19-21 10:19PM  Dow Jones Futures: Why This Market Rally Is So...
3  Mar-19-21 06:13PM  Zuckerberg: Apples Privacy Move Could Spur Mor...
4  Mar-19-21 05:45PM  Apple (AAPL) Dips More Than Broader Markets: W...
5  Mar-19-21 04:17PM  Facebook Stock Jumps As Zuckerberg Changes Tun...
6  Mar-19-21 04:03PM  Best Dow Jones Stocks To Buy And Watch In Marc...
7  Mar-19-21 01:02PM  The Nasdaq's on the Rise Friday, and These 2 S...

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM