ValueError:列的长度必须与pandas中的键的长度相同

时间:2020-05-07 05:25:23

标签: python pandas

我的df低于

MemoryStream stream = new MemoryStream();

using (SpreadsheetDocument foo = SpreadsheetDocument.Create(stream, SpreadsheetDocumentType.Workbook))
  {
     WorkbookPart workbookPart = foo.AddWorkbookPart();
     workbookPart.Workbook = new Workbook();
     workbookPart.Workbook.AddNamespaceDeclaration("r", "http://schemas.openxmlformats.org/officeDocument/2006/relationships");

     Sheets sheets = workbookPart.Workbook.AppendChild<Sheets>(new Sheets());

     string idPlanilha = "Report";

     WorksheetPart worksheetPart = workbookPart.AddNewPart<WorksheetPart>(idPlanilha);
     worksheetPart.Worksheet = new Worksheet(new SheetData());
     Sheet planilha1 = new Sheet()
     {
        Id = idPlanilha,
        SheetId = 1,
        Name = "first"
     };
     sheets.Append(planilha1);

     SheetData dadosPlanilha = worksheetPart.Worksheet.GetFirstChild<SheetData>();

     UInt32Value indice = 1;
     foreach (DataRow rowDados in dt.Rows)
     {
        ...
     }

     worksheetPart.Worksheet.Save();
     workbookPart.Workbook.Save();
     foo.Close();

     stream.Position = 0;

     XmlDocument document = new XmlDocument();

     StreamReader reader = new StreamReader(stream);

     document.Load(reader); // The error that did out:" Invalid root level data. Line 1, position 1."

     byte[] file = Encoding.Default.GetBytes(document.OuterXml);

     return File(file, document.Name);
  }

我需要除 Cost,Reve 0,3 4,0 0,0 10,10 4,8 len(df['Cost']) = 300 len(df['Reve']) = 300

下面是我的代码

df['Cost'] / df['Reve']

我收到错误df[['Cost','Reve']] = df[['Cost','Reve']].apply(pd.to_numeric)

ValueError: Columns must be same length as key

我收到错误df['C/R'] = df[['Cost']].div(df['Reve'].values, axis=0)

1 个答案:

答案 0 :(得分:0)

问题是重复的列名,请验证:

#generate duplicates
df = pd.concat([df, df], axis=1)
print (df)
  Cost Reve Cost Reve
0    0    3    0    3
1    4    0    4    0
2    0    0    0    0
3   10   10   10   10
4    4    8    4    8

df[['Cost','Reve']] = df[['Cost','Reve']].apply(pd.to_numeric)
print (df)
# ValueError: Columns must be same length as key

您可以找到以下列名称:

print (df.columns[df.columns.duplicated(keep=False)])
Index(['Cost', 'Reve', 'Cost', 'Reve'], dtype='object')

如果列中的值相同,则删除重复项:

df = df.loc[:, ~df.columns.duplicated()]
df[['Cost','Reve']] = df[['Cost','Reve']].apply(pd.to_numeric)

#simplify division
df['C/R'] = df['Cost'].div(df['Reve'])
print (df)
   Cost  Reve  C/R
0     0     3  0.0
1     4     0  inf
2     0     0  NaN
3    10    10  1.0
4     4     8  0.5