添加具有基于从文件名中提取的日期的值的列(值的长度 (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) 不匹配)的主要内容,如果未能解决你的问题,请参考以下文章