从 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 文件修改数据框中的“时间”列的主要内容,如果未能解决你的问题,请参考以下文章

如何从熊猫数据框中的时间戳列中删除时区

如何从包含文本的熊猫数据框中的列中提取年份(或日期时间)

逻辑操作:从数据框中的列中选择两个值

从 pandas 数据框中的元组列中删除元素

熊猫从数据框中的一列中提取部分字符串并将其存储在一个新列中

从数据框中的所有列中获取值的最简单方法是啥[重复]