python - 在一列中组合两种数据类型
问题描述
我正在将一个 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' 转换为日期,但可以将 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”不能具有日期类型。
推荐阅读
- csv - 在 Drupal 8 中将内容导出为 csv - Islandora
- android - 如何解决“ld:错误:.* :relocation R_AARCH64_ADR_PREL_PG_HI21 out of range: 20145225728 is not in [-4294967296, 4294967295]”
- c++ - 从字符串向量创建等效的 C++ 'argv'
- apache-spark - 如何使用非分区列上的过滤器优化 spark sql 选择查询?
- java - 在任何 IDE 中运行脚本但在 replit 中运行脚本的问题不存在任何问题——JAVA
- firebase - Flutter Firebase 消息停用可见通知
- flutter - Flutter Mapbox 如何显示我的汽车的当前位置
- jestjs - 使用 serenityJS + Jasmine 在 Angular Web App 上运行 tets 时出现问题
- javascript - 节点JS NPM模块中的回调问题
- angular - 过滤管不能在 10 角与离子一起工作