Python 我们如何附加或合并多个模式基本相似但并非全部相似的文件

Python 我们如何附加或合并多个模式基本相似但并非全部相似的文件,python,pandas,Python,Pandas,我正在尝试将一组文本文件(全部以制表符分隔)合并到一个文件中,并将其另存为CSV格式。有些模式是相同的,但较新文件中的字段并不总是存在于较旧的文件中。另外,我想在每行的最后一列中添加文件名 所有文件中的字段名都可以是这样的: RIAD4097 RIAD4235 RIAD4239 较新的文件可能有以下内容(旧文件中缺少这些内容): 这是我正在测试的代码,但我得到了一个错误 import os, glob import pandas as pd path = "C:\\Us

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

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

RIAD4097    RIAD4235    RIAD4239
较新的文件可能有以下内容(旧文件中缺少这些内容):

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

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]
这一行抛出一个错误

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]
错误是:

TypeError:“str”对象不支持项分配

我试图在每一行的最后一列中列出文件名

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

使用
os.path.basename(f)
提取文件名。若要保存新列,请使用
[]
而不是
列表指定。附加

导入操作系统
...
全部_df=[]
对于所有_文件中的f:
df=pd.read_csv(f,分隔符='\t')
df['file']=os.path.basename(f)#新列
全部附加(df)
df_append=pd.concat(全部_df,忽略_index=True,排序=True)
df_append.to_csv(“C:\\Users\\ryans\\OneDrive\\Desktop\\merged.csv”)
更好地使用列表理解和
assign
添加新列:

all_df=[(pd.read_csv(f,分隔符='\t'))
.assign(file=os.path.basename(f)),用于所有_文件中的f]
df_append=pd.concat(全部_df,忽略_index=True,排序=True)
df_append.to_csv(“C:\\Users\\ryans\\OneDrive\\Desktop\\merged.csv”)

尝试的代码是否有任何错误或不期望的结果?
pd.concat
不需要相同的列。我刚刚更新了我的原始帖子。因此,如果字段名称相同,它会在以前的记录下追加新记录?如果只添加不匹配的新名称,并在下面追加匹配的数据?所有行都会追加用
concat
填充。如果列名不匹配,则为这些行填充
NaN
。您是尝试垂直堆叠(即追加)还是水平连接(即合并)?
concat
两者都可以。很抱歉这里没有说得更清楚。假设file1有列名为A、B、C和D。file2也有列名为A、B、C、D和E。我希望file2中的A、B、C和D附加在file1下,file2中的列E作为新列添加,file1中的所有行在列E中都有nan,但数据from文件2将填入列E。我想从相似的文件中捕获所有数据,创建一个数据帧,并将其推送到SQL Server表中。