从 LAS 文件修改数据框中的“时间”列
Posted
技术标签:
【中文标题】从 LAS 文件修改数据框中的“时间”列【英文标题】:Modifying 'Time' column in data frame from LAS file 【发布时间】:2022-01-07 11:09:57 【问题描述】:我的目标是从 LAS 文件表中制作一个数据框。但由于时间格式(时:分:秒:毫秒)的原因,误读,最终误构造数据框。
Here is small piece from my actual LAS file table:
~A TIME GTDEPTH GTPQH GTTQ GTTN GTET GTTVD
05:06:54.946.18-Jan-2020 3717.16 -999.25 79.03 1.00 0.00 2797.33
05:06:55.146.18-Jan-2020 3717.16 0.00 79.03 1.00 0.20 2797.33
05:06:55.346.18-Jan-2020 3717.16 0.00 79.03 1.00 0.40 2797.33
05:06:55.546.18-Jan-2020 3717.16 6314.02 79.03 1.00 0.60 2797.33
05:06:55.746.18-Jan-2020 3717.16 6311.82 79.03 1.00 0.80 2797.33
And here, the data frame constructed by python:
GTDEPTH GTPQH GTTQ GTTN GTET GTTVD UNKNOWN:1 UNKNOWN:2 UNKNOWN:3
TIME
05:06: NaN NaN -Jan-2020 3717.16 -999.25 79.03 1.0 0.0 2797.33
05:06: NaN NaN -Jan-2020 3717.16 0.00 79.03 1.0 0.2 2797.33
05:06: NaN NaN -Jan-2020 3717.16 0.00 79.03 1.0 0.4 2797.33
05:06: NaN NaN -Jan-2020 3717.16 6314.02 79.03 1.0 0.6 2797.33
05:06: NaN NaN -Jan-2020 3717.16 6311.82 79.03 1.0 0.8 2797.33
我的目标是让 pandas 正确读取“时间”列。
这是我的代码:
from matplotlib import pyplot as plt
import pandas as pd
import lasio
from datetime import datetime
data = lasio.read('myfile.las')
df = data.df()
print(df.head())
【问题讨论】:
【参考方案1】:问题似乎是“。”在时间和日期之间。从此 '。'在您的时间序列中显示为第 12 个字符,这是一种方法。
from dateutil import parser
tx = '05:06:54.946.18-Jan-2020'
datevalue = parser.parse(f'tx[:12] tx[13:]')
例如,这会产生:
datetime.datetime(2020, 1, 18, 5, 6, 54, 946000)
您可以利用此技术将时间列转换为正确的日期时间对象:
def cnvrtTime(tx):
return parser.parse(f'tx[:12] tx[13:]')
df['Time'] = df.apply(lambda row: cnvrtTime(row.Time), axis=1)
【讨论】:
我已将“parse”库导入到我的代码中,现在出现此错误:TypeError: parse() missing 1 required positional argument: 'string' 我刚刚更新了我的回复,我忘记了调用中的解析器术语以上是关于从 LAS 文件修改数据框中的“时间”列的主要内容,如果未能解决你的问题,请参考以下文章