【问题标题】:What to do if a column overlaps into another column in a dataset?如果一列与数据集中的另一列重叠怎么办?
【发布时间】:2020-04-12 02:04:15
【问题描述】:

所以我有一个 csv 文件,格式为 -

No.         Name           Money
1          Tom Cat           100
2          Dan Man           200
3          Marie             Claw300
4          Catherine K.      400

我需要检测我的第二列数据的某些部分是否在我的第三列中。 python有没有办法有效地做到这一点?

另外,这是一个虚构的例子,整个数据集包含许多这样的案例,它不是一次性事件。

编辑 - 预期输出

No.         Name           Money
1          Tom Cat           100
2          Dan Man           200
3          Marie Claw        300
4          Catherine K.      400

【问题讨论】:

  • 我假设您没有创建此 CSV?如果你这样做了,你需要解决那里的问题
  • 预期输出是什么?

标签: python pandas csv dataset


【解决方案1】:

您可以尝试以下方法:

>>> data = """No.         Name           Money
... 1          Tom Cat           100
... 2          Dan Man           200
... 3          Marie             Claw300
... 4          Catherine K.      400"""

将 Money 列的 dtype 转换为数字类型并强制错误以获取非数字时的 NaN 值。

>>> df = pd.read_csv(StringIO(data), header=None, skiprows=1, delimiter=r'\s\s+', engine='python', names=["No", "Name", "Money"])
>>> df
   No          Name    Money
0   1       Tom Cat      100
1   2       Dan Man      200
2   3         Marie  Claw300
3   4  Catherine K.      400

>>> df.Money = pd.to_numeric(df.Money, errors="coerce")
>>> df
   No          Name  Money
0   1       Tom Cat  100.0
1   2       Dan Man  200.0
2   3         Marie    NaN
3   4  Catherine K.  400.0

编辑

>>> df.Name = df.Name.str.cat(df.Money.str.extract(r'(\D+)').fillna(''))
>>> df.Money = df.Money.str.extract(r'(\d+)')
>>> df
   No          Name Money
0   1       Tom Cat   100
1   2       Dan Man   200
2   3     MarieClaw   300
3   4  Catherine K.   400

【讨论】:

  • 这似乎是正确的。但是有没有办法保留300和'Marie Claw'这个名字。我用预期的输出更新了这个问题。很抱歉给您带来不便。
【解决方案2】:

假设 Money 列的正确数据类型是数字。这会将您的 df 子集化并仅返回具有错误数据的行:

df[df.applymap(np.isreal)['Money'] == False]

【讨论】:

    猜你喜欢
    • 2021-02-13
    • 2010-12-22
    • 1970-01-01
    • 2022-11-25
    • 1970-01-01
    • 2023-01-29
    • 1970-01-01
    • 2014-05-31
    • 1970-01-01
    相关资源
    最近更新 更多