使用 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
.
我的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
.