2017-09-25 17 views
1

私は引数としてdf(dataframe)と整数(employerID)の2つの引数を持つ関数を定義しようとしています。この関数は雇用主のフルネームを返します。データフレームから単なる文字列を取得する方法

与えられたIDがどの従業員にも属していない場合は、文字列「UNKNOWN」を戻したい/中名が与えられていない場合は「LAST、FIRST」を返します。 /中間のイニシャルだけが与えられた場合は、 "LAST、FIRST M"の形式でフルネームを返します。中間のイニシャルの後に '。'が続きます。

def getFullName(df, int1): 
    df = pd.read_excel('/home/data/AdventureWorks/Employees.xls') 
    newdf = df[(df['EmployeeID'] == int1)] 
    print("'" + newdf['LastName'].item() + "," + " " + newdf['FirstName'].item() + " " + newdf['MiddleName'].item() + "." + "'") 

getFullName('df', 110) 

私はこのコードを書いたが、2つの問題を思い付いた: 1)私はDFの周りに引用符を入れていない場合、それは私にエラーメッセージを与えるだろうが、私は同じようにデータフレームを取りたいです引数ではない文字列。

2)このコードでは、ミドルネームの誰かを扱うことはできません。

申し訳ありませんが、アクセスできないExcelファイルを読むためにpd.read_excelを使用しました。誰かが列名でランダムなデータフレームを作成する方法を教えてもらえれば、私は先に進んで変更することにして、エクセルファイルなしでコードをテストすることは難しいでしょう。私は、このためのいくつかの偽のデータを作成し

+0

いくつかのサンプルデータが有用であろう。 –

+0

どのようなエラーが表示されますか?エラーメッセージも役立ちます。 – TheF1rstPancake

+0

dfを引用符で囲まないと "name 'df'が定義されていません"というエラーメッセージが表示されます。 また、employeeID(259,278,204)。 FirstName(Be、Garrett、Gabe)、MiddleName(T、R、NAN)、LastName(Miller、Vargas、Mares) ここはデータフレームのテキスト形式です。 –

答えて

1

、ありがとう:

  EmployeeID FirstName LastName MiddleName 
0   0   a  a   a 
1   1   b  b   b 
2   2   c  c   c 
3   3   d  d   d 
4   4   e  e   e 
5   5   f  f   f 
6   6   g  g   g 
7   7   h  h   h 
8   8   i  i   i 
9   9   j  j  None 

EmployeeID 9にはミドルネームを持っていませんが、誰もがありません。私がやる方法は、ロジックを2つの部分に分割することです。最初は、EmployeeIDが見つからないときのためです。 2番目は従業員の名前の印刷を管理します。 2番目の部分には、従業員がミドルネームを持っているかどうかを制御するロジックと、ミドルネームがない場合のロジックの2つのロジックセットが必要です。おそらく多くのものを1つの行のステートメントに組み込むことができますが、明快さを犠牲にする可能性があります。

また、関数からpd.read_excel呼び出しを削除しました。関数にデータフレームを渡したい場合は、データフレームをその関数の中に作成する必要があります。

def getFullName(df, int1): 
    newdf = df[(df['EmployeeID'] == int1)] 

    # if the dataframe is empty, then we can't find the give ID 
    # otherwise, go ahead and print out the employee's info 
    if(newdf.empty): 
     print("UNKNOWN") 
     return "UNKNOWN" 
    else: 
     # all strings will start with the LastName and FirstName 
     # we will then add the MiddleName if it's present 
     # and then we can end the string with the final ' 
     s = "'" + newdf['LastName'].item() + ", " +newdf['FirstName'].item() 
     if (newdf['MiddleName'].item()): 
      s = s + " " + newdf['MiddleName'].item() + "." 
     s = s + "'" 
     print(s) 
     return s 

さらに文字列を操作したい場合に備えて、値を返す関数があります。しかしそれは私だけでした。

getFullName(df, 1)を実行する場合、'b, b b.'を取得する必要があります。 getFullName(df, 9)の場合は'j, j'になるはずです。

のでいっぱいで、それは次のようになります。

df = pd.read_excel('/home/data/AdventureWorks/Employees.xls') 
getFullName(df, 1) #outputs 'b, b b.' 
getFullName(df, 9) #outputs 'j, j' 
getFullName(df, 10) #outputs UNKNOWN 

フェイクデータ:テキスト形式で

d = {'EmployeeID' : [0,1,2,3,4,5,6,7,8,9], 
    'FirstName' : ['a','b','c','d','e','f','g','h','i','j'], 
    'LastName' : ['a','b','c','d','e','f','g','h','i','j'], 
    'MiddleName' : ['a','b','c','d','e','f','g','h','i',None]} 
df = pd.DataFrame(d) 
+0

OPが偽のデータを作成する方法を知ることは役に立ちます。 – wwii

+0

よろしくお願いします。私は答えを始めた後、OPが質問を編集したと思う。 – TheF1rstPancake

+0

OPは何のために立つのですか?私は申し訳ありません。私はちょっとこれに新しい。あなたの助けに感謝します。私は近い将来に他の人を助けることができればいいと思う。 –

関連する問題