python-3.x - 数据框中的哪一行是多余的?
问题描述
我有两个dataframes
包含市场每日收盘数据。它们应该包含相同的开始日期和结束日期以及行数,但是当我打印len
每个时,一个比另一个大一:
DF1
close
date
2008-01-01 45.92
2008-01-02 45.16
2008-01-03 45.33
2008-01-04 42.09
2008-01-07 46.98
...
[2870 rows x 1 columns]
DF2
close
date
2008-01-01 60.48
2008-01-02 59.71
2008-01-03 58.43
2008-01-04 56.64
2008-01-07 56.98
...
[2871 rows x 1 columns]
我怎样才能显示哪一行:
- 有重复的行,
- 或有一个额外的日期
这样我就可以删除 [probable] 周末/假日日期行,DF2
但不在DF1
?
我试过这样的事情:
df1 = df1.drop_duplicates(subset='date', keep='first')
df2 = df1.drop_duplicates(subset='date', keep='first')
但不能让它工作[ ValueError: not enough values to unpack (expected 2, got 0)
]。
额外的:
如何从数据框中删除周末日期?
解决方案
可以使用.loc
DF2=DF2.loc[DF1.index]
如果检查 DF1 和 DF2 之间的索引不同
DF2.index.difference(DF1.index)
检查DF2是否有重复索引
DF2[DF2.index.duplicated(keep=False)]
检查周末
df.index.weekday_name.isin(['Sunday','Saturday'])
修复你的代码
df1 = df1.reset_index().drop_duplicates(subset='date', keep='first').reset_index('date')
df2 = df2.reset_index().drop_duplicates(subset='date', keep='first').reset_index('date')
我也为此推荐duplicated
df2 =df2 [df2.index.duplicated()]
有关business
def B_day(date):
return bool(len(pd.bdate_range(date, date)))
df.index.map(B_day)
推荐阅读
- javascript - 如何只影响for循环列表中的一项?
- windows - Why am I getting "The following usage of the path operator in batch-parameter substitution is invalid: %~fA"?
- javascript - 初学者 JSON 问题:变量返回未定义
- c# - 无法单击 UWP 自定义标题栏按钮
- python - Selenium - 如何修复execute_script在执行多个javascript语句后不返回任何值
- mysql - 在大型 sql 表中找到工资的第三个最大值
- java - 创建word文件的进程超时异常
- javascript - 使用 node.js 服务器提供 Three.js 虚拟现实内容
- jwt - 使用 JWT 签名将令牌列入黑名单
- html - 水平内联无序列表溢出之间的间距