【问题标题】:add substring to column if string in another column如果字符串在另一列中,则将子字符串添加到列
【发布时间】:2020-08-17 20:29:10
【问题描述】:

我正在尝试操作具有一系列日期的 csv 文件,这些日期在一个列或另一列中不一致地使用“CE”和“BCE”。想象一个精简的例子:

 ID,earliestdate, latestdate
 1,1st century, 2nd century CE
 2,3rd century, 2nd century BCE

如果 df['latestdate'] 中的“CE”,我如何编写一个将“CE”连接到 df['earliestdate'] 的函数?

【问题讨论】:

  • 不一致地使用“CE”和“BCE”的日期你怎么知道它们的使用不一致? CE 不等于 BCE。事实上,日期看起来应该是这样的。 1 世纪到 2 世纪应该是 CE 或普通时代,而 3 世纪到 2 世纪应该是 BCE 或普通时代之前。
  • BCE 和 CE 分别是酒神 BC 和 AD 系统的替代品。
  • 另外,你怎么知道,在最晚日期是 CE 的行中,最早的日期不是 BCE?对于ID 1,最早的日期可能是1st century BCE。您唯一可以确定的是,如果最晚日期是 BCE,那么最早日期也必须是 BCE。
  • 对于上下文,我拆分了一个包含一系列字符串的列,格式为“公元 1-2 世纪”,通常表示“公元 1 世纪 - 公元 2 世纪”,我试图解析 1st 以阅读公元 1 世纪。拆分列时有没有办法把它拼出来?
  • 那应该可以了。我认为 intermezzio 的解决方案可以满足您的要求。

标签: python-3.x pandas csv


【解决方案1】:

您可以使用 pandas 索引来检查哪些行中包含“CE”并将“CE”添加到相应的“earliestdate”字符串中。

df.loc[df["latestdate"].str.endswith(" CE"), "earliestdate"] = \
    df.loc[df["latestdate"].str.endswith(" CE"), "earliestdate"].astype(str) +\
    " CE"

【讨论】:

    猜你喜欢
    • 2021-08-02
    • 2022-01-04
    • 2021-06-25
    • 1970-01-01
    • 1970-01-01
    • 2021-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多