【问题标题】:Combining two data types in one column在一列中组合两种数据类型
【发布时间】:2020-08-05 20:37:23
【问题描述】:

我正在将一个 Excel 文件读入 Python,其中有一列日期格式为字符串。一些单元格包含破折号而不是日期。目前我正在将破折号转换为空白,然后将该列格式化为日期时间列。但是,我想让带有破折号的单元格读取“打开”而不是空白。这可能吗?

df_Fin['Trade Term Date'] = np.where(df_Fin['Modified Term Date'] == '-', '', 
                                     df_Fin['Modified Term Date'])

df_Fin['Trade Term Date'] = [time.date() for time in df_Fin['Trade Term Date']]

【问题讨论】:

  • 您是否尝试将破折号替换为“OPEN”而不是空字符串?
  • 是的,先这样做了,我得到一个错误,说'str'对象没有属性'date'

标签: python numpy dataframe


【解决方案1】:

您不能将 'OPEN' 转换为日期,但您可以将 lambda 函数映射到列表:

    from datetime import datetime as d.strptime
    
    #This tranforms x into a date if x has not the value 'OPEN'
    date_format = "%d.%m.%Y" #Change this to your format. d = day, m = month, y = year
    transform = lambda x: d.strptime(x, date_format) if x != 'OPEN' else x

    #This applies the Function to the complete list
    df['Trade Term Date'] = list(map(transform, df['Trade Term Date']))

我用这种值创建了一个小数据框:

       Trade Term Date
0  2020-03-12 00:00:00
1  2020-03-12 00:00:00
2  2020-03-12 00:00:00
3  2020-03-12 00:00:00
4  2020-03-12 00:00:00
5                 OPEN
6  2020-03-12 00:00:00
7                 OPEN

您可以在 lambda 表达式中应用您需要的任何函数。

但一个小问题仍然存在。如果将某些数据转换为日期,则列的类型将不是日期,因此数据不会作为日期安全。这是由于 num-memory 过程,其中列中的每个元素都需要具有相同的数据类型,而“OPEN”不能具有日期类型。

【讨论】:

  • 非常感谢。我喜欢将列作为日期类型,但如果这是在某些单元格中包含字符串的唯一方法,我可以解决这个问题。但是,这行代码产生了以下错误:值的长度与索引的长度不匹配
  • 啊。对不起我忘记了。它跳过值。我编辑我的分析器
猜你喜欢
  • 2021-10-19
  • 1970-01-01
  • 2022-10-16
  • 1970-01-01
  • 2015-10-03
  • 1970-01-01
  • 1970-01-01
  • 2018-02-04
  • 1970-01-01
相关资源
最近更新 更多