将一列插入从 python 中的文件名中提取的 csv 中

问题描述 投票:0回答:1

我正在尝试将“StatementDate”列插入到 csv 中,其中日期位于 csv 标题中。这是动态的,并且每周都会发生变化。

标题的格式相同,但日期会改变。

示例:

011J9O00_WA_07-10-2024.csv

我想只提取日期部分

我当前的设置:

df = pd.read_csv("011J9O00_WA_07-10-2024.csv")
df["011J9O00_WA_07-10-2024.csv"] = os.path.basename('011J9O00_WA_07-10-2024.csv')
data.append(df)

这给了我一个错误,即“数据”未定义

我在想类似的事情 df.insert(loc=0, column='StatementDate', value=[文件名中的日期]

正则表达式可以以某种方式仅提取日期吗?

python pandas jupyter
1个回答
0
投票

正如 @mozway 的评论所指出的,您在调用

data
时没有定义
data
变量,这就是您收到 NameError 的原因。

最重要的是,

os.path.basename('011J9O00_WA_07-10-2024.csv')
只会返回字符串“011J9O00_WA_07-10-2024.csv”,因此只要您已经知道文件名,只需将文件名存储在变量中就足够了。

话虽这么说,如果您不愿意,则不必在此处使用正则表达式,假设文件名格式是一致的。

你也可以做类似的事情

file = '011J9O00_WA_07-10-2024.csv'
date = file.split("_")[-1].strip(".csv")

或者,如果您想使用正则表达式,类似

file = '011J9O00_WA_07-10-2024.csv'
date = re.search('\d{2}-\d{2]-\d{4}', file).group()

当然,我提供的这个正则表达式示例假设日期格式在文件名之间也是一致的,但显然正则表达式可以根据您的具体需求进行定制。

否则,正如其他人指出的那样,

df.append
方法已被弃用,并且用于插入行,而不是列。

相反,您可以使用

pd.concat
功能。我建议阅读有关此内容的文档,但考虑到它们一开始读起来会有点令人困惑,我还会给出一个最小的例子

例如,如果您有一个包含 2 行的 df,则可以执行此操作的一种方法是这样的:

df = pd.DataFrame({"ID": ["A", "B"],
                   "Value": [0, 1]})

date = pd.DataFrame([file.split("_")[-1].strip(".csv") for i in range(len(df["ID"]))], columns=["Date"])

df = pd.concat([df, date], axis=1)

希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.