使用 pandas 省略 csv 文件中大于指定长度的行

Omitting rows that are larger than the specified length in a csv file using pandas

我的objective是从一个csv文件读取,写入另一个csv文件。 我有一个 csv 文件,其 header 包含 x 列。一些行中有 x+1、x+2、x-1 个值(其中一些是空的)。我想遍历每一行,找出值的数量,如果值的数量不是 x,那么我想跳过该行,并移动到下一个。

#this for loop iterates through multiple csv files in a folder and applies the specified changes
for filename in os.listdir("csv files"):
    
    filenames=os.path.join("csv files",filename)
    print(filenames)
   
    df=pd.read_csv(filenames)
        
    for row in df:

        #used the below line to rename the column names
        df.columns=["id","FirstName","LastName","UserName","Phone","IsContact","RestrictionReason","Status","IsScam","Date"]

        #removed the Status column
        df.pop("Status")

        #used the line below to reorder the arrangement of columns in the dataframe
        df = df.reindex(columns=['id', 'Phone', 'FirstName', 'LastName', 'UserName',"IsContact","IsScam","Date","RestrictionReason"])

        df.to_csv(filenames,index=False)

如您所见,最后有 10 列,在我删除 Status 列之后,它的值/ 但有些数据有 11 或 12 个值。我不希望它们出现在我的新 csv 文件中,所以我想跳过那些特定的行,但我不知道该怎么做。
这是前 5 个值,包括数据帧的 header:

                       id         Phone        FirstName            LastName         UserName  IsContact  IsScam                  Date  RestrictionReason
0     MT103 WIRE TRANSFER  9.477897e+10           Rooban                Naan              NaN      False   False  5/5/2022 11:51:37 PM                NaN
1     MT103 WIRE TRANSFER  9.199007e+11           Vbanna                Corp       Vbannacorp       True   False  5/5/2022 11:51:14 PM                NaN
2     MT103 WIRE TRANSFER  9.197899e+11       Chennail B               Party  RamaRaoTadimeti       True   False  5/5/2022 11:51:14 PM                NaN
3     MT103 WIRE TRANSFER  9.196008e+11            Sahai                 NaN          JAS2777       True   False  5/5/2022 11:51:14 PM                NaN
4     MT103 WIRE TRANSFER  8.801818e+12     Md Shah Alam                 NaN  shahalamtrading       True   False  5/5/2022 11:51:14 PM                NaN

忽略最左边没有 header 的列,这是我在编写 csv 文件时不小心的结果。

使用 Pandas 1.3.0+ 你可以:

df = pd.read_csv('your.csv', on_bad_lines='skip') 

使用 Pandas 1.4.0+,您可以使用可调用函数执行更多操作,请参阅 Pandas dataframe read_csv on bad data(1.4.0 的新功能)以更深入地了解使用可调用函数可以执行的操作连同 on_bad_lines.