在迭代中插入和更新python Dataframe

时间:2017-11-21 11:44:08

标签: python pandas dataframe

我已经制作了一个脚本来检查某些文件的有效性,并将数据框写入有效列表名称和带注释的vaild中。

但是当我运行时我无法将所有文件名插入数据框,只更新了第一个文件名

我的代码如下:

file_path = 'C:\file'
f =next(os.walk(file_path))[2]
df = pd.DataFrame(index=range(1,len(f)) ,columns = ['Valid Files','In Valid Files','Comments'])

for file in f:
    filename = file
    file_name = '%s'%file_path+'\\'+'%s'%file
    try:
        parsefile('%s'%file_name)
        df["Valid Files"]= '%s'%filename
        df["Comments"] = '--'
    except Exception, e:
        df["In Valid Files"]= '%s'%filename
        df["Comments"]= e
df  

我的输出是

Valid Files    In Valid Files   Comments
1   Testa.xml     Test_f.xml    error1
2   Testa.xml     Test_f.xml    error1
3   Testa.xml     Test_f.xml    error1

但我的期望是这样的

Valid Files    Comments  In Valid Files  Comments
1   Testa.xml     --        Test_f.xml   error1
2   Testb.xml     --        Test_h.xml   error2
3   Testc.xml     --        Test_k.xml   error3

期待改进和建议。提前致谢。

1 个答案:

答案 0 :(得分:1)

您正在覆盖“有效文件”列中的“使用有效文件”列注释。

试试这个:

for file in f:
    filename = file
    file_name = '%s'%file_path+'\\'+'%s'%file
    try:
        parsefile('%s'%file_name)
        df["Valid Files"]= '%s'%filename
        df["Valid Files Comments"] = '--'
    except Exception, e:
        df["In Valid Files"]= '%s'%filename
        df["In Valid Files Comments"]= e

我无权添加评论。如果没有评论,我会删除答案。

如果直接写入for循环中的列,它将仅更新最后一个值。因此,我建议您创建一个列表并附加值,然后使用列表在您编写时使用键名创建字典,然后创建数据帧。这个过程很漫长我不知道它的简化解决方案。

像:

Valid_Files = []
Valid_Files_Comments = []
In_Valid_Files = []
In_Valid_Files_Comments = []
for file in f:
    filename = file
    file_name = '%s'%file_path+'\\'+'%s'%file
    try:
        parsefile('%s'%file_name)
        Valid_Files.append('%s'%filename)
        Valid_Files_Comments.append('--')
    except Exception, e:
        In_Valid_Files.append('%s'%filename)
        In_Valid_Files_Comments.append('e')
df = pd.DataFrame({'Valid Files':Valid_Files,'Valid Files Comments':Valid_Files_Comments,'In Valid Files':In_Valid_Files,'In Valid Files Comments':In_Valid_Files_Comments})

这将为您提供所需的输出。