使用 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
等等
我正在编写一个代码,它遍历一个文件夹中的许多 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
等等