我们如何才能附加或连接多个模式基本相似但不是全部的文件



我正试图将一堆文本文件(均以制表符分隔(合并为一个文件,并将其保存为CSV格式。有些模式是相同的,但较新文件中的字段并不总是存在于较旧的文件中。此外,我想在每行的最后一列中添加文件名。

所有文件中的字段名称都可能是这样的:

RIAD4097    RIAD4235    RIAD4239

较新的文件可能有这个(这些在较旧的文件中丢失(:

RIADJA28    RIADKW02

这是我正在测试的代码,但我遇到了一个错误。

import os, glob
import pandas as pd
path = "C:\Users\ryans\OneDrive\Desktop\schemas\"
all_files = glob.glob(os.path.join(path, "*.txt"))
all_df = []
for f in all_files:
df = pd.read_csv(f, delimiter='t')
f['file'] = f.split('/')[-1]
all_df.append(df,f)

merged_df = pd.concat(all_df, ignore_index=True, sort=True)
df_merged.to_csv("C:\Users\ryans\OneDrive\Desktop\merged.csv")

这行抛出一个错误。

f['file'] = f.split('/')[-1]

错误为:

类型错误:"str"对象不支持项目分配

我正在尝试获取每行最后一列中列出的文件名。

根据我的研究,我认为append方法应该有效,我认为concat方法也可以作为一种替代方法。有没有一种更喜欢的方式来做这种事情?谢谢

使用os.path.basename(f)提取文件名。并保存一个用[]而不是用list.append分配的新列。

import os
...
all_df = [] 
for f in all_files: 
df = pd.read_csv(f, delimiter='t') 
df['file'] = os.path.basename(f)     # NEW COLUMN
all_df.append(df) 
df_append = pd.concat(all_df, ignore_index=True, sort=True)
df_append.to_csv("C:\Users\ryans\OneDrive\Desktop\merged.csv")

更好地使用assign的列表理解来添加新列:

all_df = [(pd.read_csv(f, delimiter='t')
.assign(file=os.path.basename(f)) for f in all_files]
df_append = pd.concat(all_df, ignore_index=True, sort=True)
df_append.to_csv("C:\Users\ryans\OneDrive\Desktop\merged.csv")

最新更新