pandas 重复日期问题

pandas and trouble with duplicate dates

我有一个包含以下示例输出的 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

我知道上面提到的有两个日期的行。此列的数据类型是 pandas 中的对象。 当尝试将此列转换为 pandas 中的日期时间格式时,我在所有具有此双日期问题的行上遇到错误,必须在 csv 中逐一查找和编辑它们。 所以,我尝试了以下方法来清除我的 50K 行中有这个双日期问题的所有行:

df[col] = df[col].str.strip()
df[col] = df[col].str[:10]

根本不影响任何双重日期。

我还尝试计算列中每个值的长度,然后如果生成的列长度超过 10,则简单地删除日期值。不过,双日期行仍然存在。

我还尝试了以下方法来定位此特定行以进一步检查它,但此代码导致 0 行。

bad_dates = df[df[col].str.contains('10/20/1945')]

那么,有什么创意来清理这些双重日期吗? (它发生在可能有一百个随机分布的列值)

有测试文件

col
3/12/1970
3/1/1942
10/20/1945  10/20/1945
10/27/1960
10/5/1952

另存为/project/test/test.csv

import pandas as pd
df = pd.read_csv('~/project/test/test.csv')

给予

    col
0   3/12/1970
1   3/1/1942
2   10/20/1945 10/20/1945
3   10/27/1960
4   10/5/1952

那么你的例子

df['fixed'] = df['col'].str[:10]

给予

    col                     fixed
0   3/12/1970               3/12/1970
1   3/1/1942                3/1/1942
2   10/20/1945 10/20/1945   10/20/1945
3   10/27/1960              10/27/1960
4   10/5/1952               10/5/1952

基本上这是有效的,你的情况有所不同,导致了差异。

您可以使用拆分来执行此操作。

split() 将每一行 (str) 拆分为由空格分隔的值列表,然后 [-1] 仅选择最后一个值,这消除了所有额外值并仅保留单个值需要。

df['col'].apply(lambda x: x.split()[-1])