添加具有基于从文件名中提取的日期的值的列(值的长度 (1) 与索引的长度 (50) 不匹配)

Posted

技术标签:

【中文标题】添加具有基于从文件名中提取的日期的值的列(值的长度 (1) 与索引的长度 (50) 不匹配)【英文标题】:Adding a column with values based on extracted date from filename (Length of values (1) does not match length of index (50)) 【发布时间】:2021-05-11 05:04:24 【问题描述】:

我在这个问题上苦苦挣扎了一段时间,很想听听你的想法如何解决它。

我有一些需要拆分的文件。我读到 glob 最终是这样做的好习惯。拆分文件后,我可以将其读取到我的 pandas 数据框中。我正在使用正则表达式解析日期,并希望将其移交给新列。我的问题是数据框的长度与解析日期的长度不同。我尝试了使用 lambda 和列表理解的不同方法,但由于我不习惯它,我在获得正确的代码行时遇到了明显的问题。

我不明白的是,如果我采取例如

df['date'] = 1

它用 1 附加数据框填充系列。但是当它被提供一个变量时,它的行为就不一样了。有些对我来说很奇怪。我在这里阅读了一些朝着相同方向发展的问题,但无法适应我的问题。

import glob
import pandas as pd
import re


filelist = glob.glob('./wso-meistdiskutiert/*meistdiskutiert')
type(filelist)

for f in filelist:
    df_tmp = pd.read_html(f, decimal='.', thousands='.')[1]
    date = re.findall('\d+', f )
    df_tmp['date = '] = date
    df = df.append(df_tmp)

【问题讨论】:

【参考方案1】:

好的,我发现了问题。我在变量日期中移交了一个具有一个值的列表。 Pandas 显然会尝试遍历列表,并且需要与数据帧具有相同的长度。由于情况并非如此,您将收到错误消息。我现在从列表中取出 str,它工作正常。

for f in filelist:
    df_tmp = pd.read_html(f, decimal='.', thousands='.')[1]
    datetime = re.findall('\d+', f )
    print('datetime is type = ', type(datetime))
    datetime = datetime[0] #<-- taking out from list the needed string
    df_tmp.insert(11, "date", datetime) 
    display(df_tmp)

【讨论】:

以上是关于添加具有基于从文件名中提取的日期的值的列(值的长度 (1) 与索引的长度 (50) 不匹配)的主要内容,如果未能解决你的问题,请参考以下文章

添加具有基于另一个日期时间列的值的日期时间列

具有表示集合列表的字符串值的列,将相关信息提取到新列

从VBA中的过滤器中提取唯一值的集合

计算具有相同 id 的列的值的存储过程

如何将具有值的列添加到 Spark Java 中的新数据集?

如果源文件中不存在,ssis 添加具有默认值的列