您好,我遇到了一个问题,我正在使用大型csv(平均600x1000,由我不需要的软件生成的文件,可惜其中一些格式错误:
污垢问题是当我使用此代码加载文件时:
df=read_csv(csv_path,sep=';')
两个用红色圆圈圈出的单元格都被视为列名,所以我现在要做的是:
df=read_csv(csv_path,sep=';',names=None)
它完全按照我的预期工作!但是现在这是我真正的问题,我需要转置此数据框并添加真实的列名,所以这是我的代码:
df=read_csv(csv_path,sep=';',names=None)
col_names =["src_label"]
for i in range(len(df.columns)-1):
col_names.append("Result_"+str(i))
df=df.transpose()
data=df.to_dict
df1 = DataFrame(data, columns=col_names)
但是我遇到以下错误:
ValueError: DataFrame constructor not properly called!
我曾尝试致电
df1 = DataFrame(df, columns=col_names)
我也尝试过
df.columns=col_names
很明显地调换了它,但是我没有任何效果
我也尝试过
df.names=col_names
我收到警告说“无法通过创建属性来设置新值”
最后一次尝试是:
for j in range(len(col_names)-1):
df = df.rename_axis(col_names[i], axis=i)
没有错误,也没有影响
编辑: 只是试图像这样读取csv:
df=read_csv(csv_path,sep=';',header=None)
得到
ParserError: Error tokenizing data. C error: Expected 2 fields in line 2, saw 975
答案 0 :(得分:0)
刚刚找到了解决方案:
df=read_csv(csv_path,sep=';',header=None,skiprows=[0])
df1=df.transpose()
col_names =["src_label"]
for i in range(len(df1.columns)-1):
col_names.append("Result_"+str(i))
df1.columns=col_names
感谢@HenryYik,他使我走上了skiprows
答案 1 :(得分:0)
我想,您不知道输入文件是否“损坏”。
为此,定义以下执行自定义的类 过滤输入文件:
class InFile:
def __init__(self, infile):
self.infile = open(infile)
def __iter__(self):
return self
def read(self, *args, **kwargs):
while True:
line = self.infile.readline()
if not line: # EOF
self.infile.close()
break
if line.count(',') > 1:
break
return line
它用一个逗号或没有逗号来“吞下”行。
然后读取您的CSV文件:
df = pd.read_csv(InFile('Input.csv'))
我在以下位置测试了上面的代码
在两种情况下,我都有一个合适的DataFrame。