使用 pandas 从一个 csv 文件写入另一个文件时出现值错误

Value error while writing from one csv file to another using pandas

我正在编写一个代码,它遍历一个文件夹中的许多 csv 文件(使用 for 循环),从每个 csv 文件中删除错误数据(其中行值大于列数,有时小于列数).删除后,我重新排列列,然后将有用的数据写入新的 csv 文件。
在下面的代码中,for 循环用于在文件夹中存在的不同文件之间循环。您可以假定 df=pd.read_csv 行作为开头并假定正确的缩进。

import pandas as pd
import os

for filename in os.listdir("csv files copy"):
    filenames=os.path.join("csv files copy",filename)
    print(filename)
   
    df=pd.read_csv(filenames, error_bad_lines=False)

    for row in df:

        df.columns=["id","FirstName","LastName","UserName","Phone","IsContact","RestrictionReason","Status","IsScam","Date"]
        df = df.drop(labels="Status", axis=1)
        df = df.reindex(columns=['id', 'Phone', 'FirstName', 'LastName', 'UserName',"IsContact","IsScam","Date","RestrictionReason"])
        df.to_csv(filenames,index=False)

这样做时,这是我收到的错误。
ValueError: Length mismatch: Expected axis has 9 elements, new values have 10 elements

这是我正在使用的数据帧的前 4 个值和 header:

id                      Phone   FirstName   LastName   UserName     IsContact  IsScam Date                       RestrictionReason        Status             
Forex Pips Fire Free    NaN     Goldenboy      NaN     Goldenboyys      False   False  5/7/2022 8:34:07 AM                NaN             NaN
Forex Pips Fire Free    NaN     Abu 3odeh      NaN         oudah12      False   False  5/7/2022 8:38:03 AM                NaN             NaN
Forex Pips Fire Free    NaN        Rahman     Azar     Rahman_Azar      False   False  5/7/2022 8:41:22 AM                NaN             NaN
Forex Pips Fire Free    NaN         HUDLE      NaN       Hudle1051      False   False  5/7/2022 8:41:11 AM                NaN             NaN

下面给出的是需要输入上述数据的目标csv文件的header

id Phone FirstName LastName UserName IsContact IsScam Date RestrictionReason

因为您在这一行中只给出了 9 列,所以您错过了 'Status'

df = df.reindex(columns=['id', 'Phone', 'FirstName', 'LastName', 'UserName', 'IsContact', 'IsScam', 'Date', 'RestrictionReason'])
df.to_csv(filenames, index=False)

您需要删除for循环如下:

import pandas as pd
import os

for filename in os.listdir("csv files copy"):
    filenames = os.path.join("csv files copy", filename)
    print(filename)
   
    df = pd.read_csv(filenames, error_bad_lines=False)
    df.columns = ["id", "FirstName", "LastName", "UserName", "Phone", "IsContact", "RestrictionReason", "Status", "IsScam", "Date"]
    df = df.drop(labels="Status", axis=1)
    df = df.reindex(columns=["id", "Phone", "FirstName", "LastName", "UserName","IsContact","IsScam","Date","RestrictionReason"])
    df.to_csv(filenames, index=False)

这是导致错误的原因,不需要。第一次通过循环时,它正确地删除了 Status 列并保存了 CSV 文件。第二次通过循环(在同一数据帧上)它尝试再次执行 df.columns 但现在没有 Status 列,因此给出的列数不正确。

代码 for row in df: 实际上会遍历数据框中的列名,
例如id 然后 FirstName 等等