2016-07-09 12 views
0
import pandas as pd 
import xlsxwriter 
import openpyxl as px 
import numpy as np 
from xlwt import Workbook 
from os.path import expanduser 

home = expanduser("~") 

def read_survey(): 
    df_appliance=pd.read_csv('C:/Users/nidi/Desktop/New folder/app_info.csv') 
    df_appliance.fillna(0, inplace=True) 
    return df_appliance 

df_appliance=read_survey() 

def map_appliance_info(df_appliance): 

    oven_usage=[] 
    #oven_type_radio=[] 
    oven_type_micro=[] 
    oven_type_oven=[] 
    tube_light_count=[] 
    led_count=[] 
    incand_count=[] 
    cfl_count=[] 

    for i in range(len(df_appliance['sur_key'].values)):     

     if df_appliance['oven-type'].values[i]=='radio': 
      #oven_type_radio.append(1) 
      oven_type_micro.append(0) 
      oven_type_oven.append(0) 
     elif df_appliance['oven-type'].values[i]=='micro': 
      #oven_type_radio.append(0) 
      oven_type_micro.append(1) 
      oven_type_oven.append(0) 
     elif df_appliance['oven-type'].values[i]=='oven': 
      #oven_type_radio.append(0) 
      oven_type_micro.append(0) 
      oven_type_oven.append(1) 
     else: 
      #oven_type_radio.append(0) 
      oven_type_micro.append(0) 
      oven_type_oven.append(0) 

     if df_appliance['oven-ousg'].values[i]=='little': 
      oven_usage.append(1) 
     elif df_appliance['oven-ousg'].values[i]=='defrost': 
      oven_usage.append(5) 
     elif df_appliance['oven-ousg'].values[i]=='mod': 
      oven_usage.append(12) 
     elif df_appliance['oven-ousg'].values[i]=='ext': 
      oven_usage.append(30) 
     else: 
      oven_usage.append(0) 

     #return df_appliance_mapped 

     df_appliance_mapped = map_appliance_info(df_appliance) 

result=np.array(df_appliance_mapped) 

Dies ist mein Code. wenn map_appliance_info (df_appliance) Drucken Ich erhalte die fehler-Maximale Rekursionstiefe beim Aufruf eines Python-Objekts überschritten - Laufzeitfehler

Datei "E: /iisc/code/try.py", Linie 69, in map_appliance_info df_appliance_mapped = map_appliance_info (df_appliance)

Datei „E: /iisc/code/try.py "Zeile 35, in map_appliance_info für i im Bereich (len (df_appliance [ 'sur_key'] Werte).):

Datei" C: \ Benutzer \ nidi \ Anaconda2 \ lib \ site-packages \ pandas \ core \ frame.py ", Zeile 1957, in getitem indexer = convert_to_index_sliceable (selbst, Schlüssel)

Datei "C: \ Benutzer \ nidi \ Anaconda2 \ lib \ site-packages \ Pandas \ core \ indexing.py", Zeile 1658 in convert_to_index_sliceable elif isinstance (Schlüssel, compat.string_types):

Runtime : maximale Rekursionstiefe beim Aufruf eines Python-Objekts überschritten

kann jemand helfen. Danke

Antwort

0

Da Sie pd.read_excel aufrufen, müssen Sie Pandas installiert haben. Daher ist der einfachste Weg, um die Daten zu fusionieren ist pd.merge auf zwei Datenrahmen zu nennen:

import pandas as pd 

df1 = pd.DataFrame({0: [1, 1, 0, 0], 1: [0, 0, 1, 1], 2: [1, 2, 1, 5], 3: [1, 2, 3, 4]}) 
df2 = pd.DataFrame({0: [0, 1, 1, 0], 1: [1, 0, 0, 1], 2: [1, 2, 1, 5]}) 
result = pd.merge(df2, df1, on=[0,1,2]) 
print(result.values) 

druckt

[[0 1 1 3] 
[1 0 2 2] 
[1 0 1 1] 
[0 1 5 4]] 

Wenn df_appliance_mapped der zweite Datenrahmen ist, könnten Sie verwenden:

first_df = pd.read_excel('E:/iisc/code/energy_usage_appliance.xlsx',0,header=None) 
result = pd.merge(df_appliance_mapped, first_df, on=[0,1,2]) 
+0

aber wird es funktionieren, da die len der dateien nicht gleich sind. Ich muss die 4. Spalte anfügen, wenn die Spalten übereinstimmen. – Nidhi

+0

und es zeigt mir einen Fehler- AttributeError: 'numpy.darray' Objekt hat kein Attribut '_values' – Nidhi

Verwandte Themen