python - 熊猫和重复日期的麻烦
问题描述
我有一个带有以下示例输出的 csv 文件:
3/12/1970
3/1/1942
10/20/1945 10/20/1945
10/27/1960
10/5/1952
我用 df = pd.read_csv(filename) 将它带入 pandas。
我知道有如上所述的双日期行。此列的 dtype 是 pandas 中的对象。当试图在 pandas 中将此列转换为日期时间格式时,我在所有具有此双日期问题的行上都出现错误,并且必须在 csv 中一一查找和编辑它们。因此,我尝试了以下方法来清除我的 50K 行中存在此双日期问题的所有行:
df[col] = df[col].str.strip()
df[col] = df[col].str[:10]
根本不影响任何双日期。
我还尝试计算 col 中每个值的长度,然后如果结果 col 长度超过 10,则简单地删除日期值。但是,双日期行仍然存在。
我还尝试了以下方法来定位这个特定的行以进一步检查它,但是这个代码导致 0 行。
bad_dates = df[df[col].str.contains('10/20/1945')]
那么,有什么创意可以清理这些重复日期吗?(它可能发生在一百个随机分布的列值上)
解决方案
你可以使用 split 来做到这一点。
split()
将每一行拆分(str)
为一个由空格拆分的值列表,然后 [-1] 仅选择最后一个值,这将消除所有额外的值并根据需要仅保留单个值。
df['col'].apply(lambda x: x.split()[-1])
推荐阅读
- python - 如何输入大量数据来训练 Keras 模型以防止 RAM 崩溃?
- javascript - 递归函数+数组意外行为的串联
- javascript - 为什么我无法访问 Cropper JS 的实例
- libgdx - 在设备上测试多个 libGdx 应用程序
- java - Active Directory:查询父级 AD 组的子域用户成员
- applescript - Applescript 在大苏尔莫名其妙地失败了
- java - 什么是替换只返回 false 的 if 语句墙的干净方法?
- vue.js - Vue - 强制更新 URL 中的新 id
- reactjs - InteliJ:Typescript 根据接口自动检查 {} 对象?
- amazon-web-services - 如何在不删除现有堆栈的情况下从 cloudformation 迁移到 CDK?