【问题标题】:How do I convert datestrings with '-' in it to integers when there are also years before 0当在 0 之前还有年份时,如何将带有“-”的日期字符串转换为整数
【发布时间】:2021-04-19 19:45:04
【问题描述】:

我在 Python 中有一个数据框,其中一列描述了不同的时间格式。

不同的格式是

  • NaN
  • 只有那一年
  • 年、月
  • 年、月、日

我无法将它转换为日期时间,因为它的日期早于 0。它是关于博物馆物品的,所以有些作品来自 -800。

但字符串有时也会显示用“-”分隔的年、月和日(例如“1880-04-23”)。我不能只将 '-' 转换为空字符串,因为 0 之前的年份也会出错。

有人可以帮我解决这个问题吗?有太多不同的表格,只能选择一个并删除所有其他行,这意味着数据集最终将非常空。

如果最后一年也可以完美,我只想能够以整数使用它。

我现在尝试做的是遍历列中的每一行,然后从第二个元素开始遍历该行中字符串的元素,搜索“-”。这样我可以在第一次出现'-'之后删除所有内容(因为我从第二个元素开始,如果年份在0之前,则不会看到'-')或用'# ' 这样我以后就可以拆分它了。

for i in range(len(df)):
    for element in df.loc[i,'columnname_with_dates_as_strings'][1:]:
        element.replace('-','#')

但这不起作用,因为我得到了 keyerror: 0 我认为我的第二行有问题,但我不知道为什么

【问题讨论】:

  • 你用什么来做到这一点?什么语言?
  • 很抱歉,在 Python 中
  • 也许将第一个字符 '-' 更改为任何字符,例如 '#',然后拆分,然后将其改回。这是更“正则表达式”的懒惰方式,但有效。或者只是先对其进行测试,如果存在,则设置一个符号“标志”(变量),删除,然后拆分,然后将其添加回来(如果设置了标志)。
  • 不确定你需要多少功能,如果不需要的话,也许你可以滚动你自己的类,在年/月/日之间转换为整数,然后使用位掩码等返回规范字符串。跨度>
  • 在将其输入pandas 之前,将其作为预处理会更容易。我看到太多人试图与pandas 进行较量,以进行使用 Python 字符串很容易完成的处理。

标签: python string date integer


【解决方案1】:

def split_date(date_str):
    if date_str[0] == '-':
        sign = 1
    else:
        sign = 0
    date_array = date_str[sign:].split('-')
    return (sign, date_array)

>>>
>>> split_date("1880-04-23")
(0, ['1880', '04', '23'])
>>> split_date("-800")
(1, ['800'])
>>> split_date("-123-5-6")
(1, ['123', '5', '6'])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-21
    • 1970-01-01
    • 2017-03-30
    • 2023-03-09
    • 2022-08-09
    • 2019-08-12
    • 1970-01-01
    • 2023-04-09
    相关资源
    最近更新 更多