2017-07-29 1 views
0

Ich möchte automatisch die Namen für fehlende Werte für Pandas Spalte basierend auf einer If-Bedingung ändern, vorzugsweise mit einem 'String_Name_number'. Die Zahlen sollten bei eins beginnen und bei dem letzten fehlenden Wert enden. Ich habe beschlossen, meine Schleife wie folgt zu setzen, um Daten aus einer Zeichenfolge auszuwählen.Schleife durch einen Platzhalter, um eine Pandas-Serie zu erstellen

Die Ergebnisse (df2) aus der fehlenden Spalte bleiben jedoch gleich. Wie folgt; - Befragter I, Jakson, Befragter I, Befragter I, Jane, Befragter I, Mary, ...

Ich erwartete, die folgenden Ergebnisse zu sehen (df2); - Befragter 1, jakson, Befragter 2, Befragter 3, Jane, Befragter 4, Mary, ...

Bitte assistieren.

import pandas as pd 

df = pd.read_csv('232 responses.csv', sep=',',header=0, parse_dates=True, 
       index_col='Timestamp') 

missing_rows_list = list(range(0, len (df))) 

for i in missing_rows_list: 
    i = 1 
    df2 = [df['Name (optional)']\ 
      .replace(np.nan, 'respondent {d[i]}'\ 
      .format(d=missing_rows_list)) if pd.isnull(df['Name (optional)']) \ 
      else df['Name (optional)'] == word in df['Name (optional)']] 
    i += 1 
+0

Bevor Sie eine weitere Beratung suchen. 'Df [ 'Name (optional)'] isnull' ist _nicht_ ein Verfahren Aufruf, aber ein Verweis auf eine Methode. Dieser Ausdruck ist immer 'True'. – DyZ

+0

Lassen Sie mich nachsehen und zu Ihnen zurückkommen. – Gwiji

+0

Angepasst an pd.isnull (df ['Name (optional)']), ich hoffe das ist ein Methodenaufruf. – Gwiji

Antwort

0

ich denke, das es sollte und Handel ist ein bequemer Ansatz:

df=pd.DataFrame({"a":["test1","test2","test3","test4",np.NAN],"b":["test5",np.NAN,"test7",np.NAN,"test9"]}) 

#Create the respondent + inex number format --> you can also save this in an extra df column if you like 
a=["respondent"]*len(df.index) 
b=list(df.index) 
c=["{0}{1}".format(a_,b_)for a_,b_ in list(zip(a,b))] 

#Replace the missing values 
for i in df.columns: 
    mask = df[i].isnull() 
    df[i].mask(mask,c, inplace=True) 

print(df) 



      a   b 
0  test1  test5 
1  test2 response1 
2  test3  test7 
3  test4 response3 
4 response4  test9 
Verwandte Themen