Pandas:复制最近日期的缺失日期数据

2024-04-24 16:50:32 发布

您现在位置:Python中文网/ 问答频道 /正文

在一个索引为data的Dataframe中,我有以下格式的一些数据。这是某些日期的数据可能丢失的财务数据。我需要用最新的日期(在感兴趣的日期之前)的数据填写缺少的日期。另外,我只需要填写一周。我如何在熊猫身上做到这一点?一个简单的方法是遍历每一行(按日期顺序),同时保留最新的数据并复制到新的数据帧中。如果缺少日期,则可以复制最新的可用数据。有更好的选择吗?你知道吗

               Open    Close     High      Low    WeekDay
Date                                                     
2018-03-12  1449.80  1433.60  1450.00  1423.60     Monday
2018-03-13  1438.60  1410.80  1439.85  1402.00    Tuesday
2018-03-14  1413.00  1390.25  1413.00  1381.00  Wednesday
2018-03-19  1340.00  1317.30  1345.00  1310.00     Monday
2018-03-20  1319.90  1304.70  1326.00  1297.00    Tuesday
2018-03-21  1314.80  1297.00  1314.80  1293.10  Wednesday
2018-03-22  1309.50  1289.80  1313.95  1275.00   Thursday
2018-03-23  1276.00  1277.90  1288.80  1270.00     Friday
2018-03-27  1285.55  1274.95  1309.95  1267.25    Tuesday
2018-03-28  1284.50  1294.65  1300.00  1273.00  Wednesday
2018-04-03  1300.00  1283.15  1300.05  1277.20    Tuesday
2018-04-04  1294.90  1271.35  1300.00  1267.55  Wednesday

Tags: 数据方法dataframeclosedata顺序格式open
1条回答
网友
1楼 · 发布于 2024-04-24 16:50:32

对没有WeekDay的所有列使用^{}^{},最后按^{}添加这些列:

(以下解决方案将填充所有缺少的天数,包括周末)

cols = df.columns.difference(['WeekDay'])
df = df[cols].resample('D').ffill()
df['WeekDay'] = df.index.weekday_name

print (df)
               Open    Close     High      Low    WeekDay
Date                                                     
2018-03-12  1449.80  1433.60  1450.00  1423.60     Monday
2018-03-13  1438.60  1410.80  1439.85  1402.00    Tuesday
2018-03-14  1413.00  1390.25  1413.00  1381.00  Wednesday
2018-03-15  1413.00  1390.25  1413.00  1381.00   Thursday
2018-03-16  1413.00  1390.25  1413.00  1381.00     Friday
2018-03-17  1413.00  1390.25  1413.00  1381.00   Saturday
2018-03-18  1413.00  1390.25  1413.00  1381.00     Sunday
2018-03-19  1340.00  1317.30  1345.00  1310.00     Monday
2018-03-20  1319.90  1304.70  1326.00  1297.00    Tuesday
2018-03-21  1314.80  1297.00  1314.80  1293.10  Wednesday
2018-03-22  1309.50  1289.80  1313.95  1275.00   Thursday
2018-03-23  1276.00  1277.90  1288.80  1270.00     Friday
2018-03-24  1276.00  1277.90  1288.80  1270.00   Saturday
2018-03-25  1276.00  1277.90  1288.80  1270.00     Sunday
2018-03-26  1276.00  1277.90  1288.80  1270.00     Monday
2018-03-27  1285.55  1274.95  1309.95  1267.25    Tuesday
2018-03-28  1284.50  1294.65  1300.00  1273.00  Wednesday
2018-03-29  1284.50  1294.65  1300.00  1273.00   Thursday
2018-03-30  1284.50  1294.65  1300.00  1273.00     Friday
2018-03-31  1284.50  1294.65  1300.00  1273.00   Saturday
2018-04-01  1284.50  1294.65  1300.00  1273.00     Sunday
2018-04-02  1284.50  1294.65  1300.00  1273.00     Monday
2018-04-03  1300.00  1283.15  1300.05  1277.20    Tuesday
2018-04-04  1294.90  1271.35  1300.00  1267.55  Wednesday

编辑:

(以下解决方案仅用于限制一周内的灌装过程)

cols = df.columns.difference(['WeekDay'])
df = df[cols].resample('D').ffill()
df['WeekDay'] = df.index.weekday_name
df = df[~df['WeekDay'].isin(['Saturday','Sunday'])]
print (df)
              Close     High      Low     Open    WeekDay
Date                                                     
2018-03-12  1433.60  1450.00  1423.60  1449.80     Monday
2018-03-13  1410.80  1439.85  1402.00  1438.60    Tuesday
2018-03-14  1390.25  1413.00  1381.00  1413.00  Wednesday
2018-03-15  1390.25  1413.00  1381.00  1413.00   Thursday
2018-03-16  1390.25  1413.00  1381.00  1413.00     Friday
2018-03-19  1317.30  1345.00  1310.00  1340.00     Monday
2018-03-20  1304.70  1326.00  1297.00  1319.90    Tuesday
2018-03-21  1297.00  1314.80  1293.10  1314.80  Wednesday
2018-03-22  1289.80  1313.95  1275.00  1309.50   Thursday
2018-03-23  1277.90  1288.80  1270.00  1276.00     Friday
2018-03-26  1277.90  1288.80  1270.00  1276.00     Monday
2018-03-27  1274.95  1309.95  1267.25  1285.55    Tuesday
2018-03-28  1294.65  1300.00  1273.00  1284.50  Wednesday
2018-03-29  1294.65  1300.00  1273.00  1284.50   Thursday
2018-03-30  1294.65  1300.00  1273.00  1284.50     Friday
2018-04-02  1294.65  1300.00  1273.00  1284.50     Monday
2018-04-03  1283.15  1300.05  1277.20  1300.00    Tuesday
2018-04-04  1271.35  1300.00  1267.55  1294.90  Wednesday

相关问题 更多 >