从数据框创建数据框

时间:2020-08-07 12:44:21

标签: python pandas dataframe

您好,我遇到了一个问题,我正在使用大型csv(平均600x1000,由我不需要的软件生成的文件,可惜其中一些格式错误:

enter image description here

污垢问题是当我使用此代码加载文件时:

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

为帮助我,我需要一个解决方案来从上一个创建新的数据帧,然后添加列名或在第一个数据帧中直接添加列名,以获得以下结果: enter image description here

2 个答案:

答案 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'))

我在以下位置测试了上面的代码

  • “常规” CSV文件,
  • 一个“损坏”的文件,第一行是 00:00:00,500

在两种情况下,我都有一个合适的DataFrame。