2016-05-26 18 views
0

Python/Pandasには比較的新しいですが、私のベルトの下で数年のプログラミングをしていますが、主にJava/C++を使用していますので、Pythonのようなスクリプト言語はありません。Pandas/Python - Excelデータ操作

私の新しい仕事は私がスクリプトのものをやっているのですが、これまでかなり基本的なものでしたので、もっと上手くやって私の上司に見せてくれることを願っています。 Pandasを使用してExcelシートから冗長性を取り除くことで、データ分析タスクの効率化を図りたいと考えていました。しかし、私が "解析"しようとしている冗長は、 "記述"内の部分文字列です。

import pandas as pd 
xlsx = pd.ExcelFile('Filename.xlsx') 
sheet1 = xlsx.parse(0) 

私はExcelファイルを読み込み、データフレームに解析しました。私はread_csvを代わりに使うほうが簡単かもしれないが、私はそれについて考えていた頃には、私はすでに秀逸なことを追い求めていました。

ID  Count#1  Count#2  Count#3   Description 
1A42H4  1    0    2    Blahblah JIG GN=TRAC Blah Blah 
242JB4  0    0    2    Blahblah JIG GN=SMOOTH Blah Blah 
3MIVJ2  2    0    2    Blahblah JIG GN=TRAC Blah Blah 
4JAXI3  1    0    3    BlahBlah JIG GN=TRAC Blah Blah 

ここ

データは種類のレイアウトされている方法である(移行が難しいことではありませんがない限り、私は、元のファイルはスペースが区切られているとき、カンマ区切りとしてエクスポートできるかだけで混乱しています)

私はこのデータシートを解析して冗長なGN=TRAC(まったく同じGN =何か)を探し、それらをまとめて別のデータシートにまとめたいと思います。だから私は私がすることを必要としなかったので、私は、「JIG」の文字列分割を使用することを決め、

`array = dataframe.description` 

それからちょうど記述列の配列を作り、それがすべての行に対して一定でした。 I

`array[0] = Blahblah, 
    GN=TRAC Blah Blah` 

で残っていたし、今私は、私は、配列

にそれらすべてを追加

GN=TRAC 

のために再びそれを隔離したかったので、そのための

`Splits = array.str.split('JIG')` 

`array2[n] = splits[n][1]` 

もう一度分割しましたsplits2 = array2.str.split(' ')

GN=TRAC 

を最初の位置として再構成し、単独で単離する。私はちょうどオリジナルの記述に区切られたスペースをやっている可能性がありますが、私は

GN=TRAC 

の場所以来解析または比較することができませんので、言葉の異なる量があるすべて変化している実感します。

これを繰り返して比較すると、私はこの小さな機能を思いつきました。

counter = 0 
temp = counter + 1 
print(sheet1.iloc[counter]) 
while counter <= len(sheet1): 
    if splits2[counter][0] == splits2[temp][0]: 
     print(sheet1.iloc[temp]) 
     temp += 1 
    if splits2[counter][0] != splits2[temp][0]: 
     temp += 1 
counter += 1 

しかし、私はここで過去には行きません。私は最初の行GN=TRACの値を持つ冗長行をすべて繰り返して見つけることができますが、カウンタは比較のために次の行を反復しません。私はいくつかのバリエーションを試しましたが、私は新しい目を望んでいました。上の表に基づいて、2番目の行に移動し、GN=SMOOTHに一致し、counterが最後の反復された行に達するまでオンとオンになるすべての行を検索します。

最後に、GN=?に基づいてまとめて出力xlsxにまとめておくとよいでしょう。私はwriterto_excelがあることを認識していますが、私はそれをどのように使用するのか分かりません。私はできるだけ多くのドキュメントを読んでいますが、私はそれがかなり複雑である理由を助けるために使うことができる関数があるようには見えません(私はそれをより効率的でスクリプト可能にする方法を教えてください。後で一般化できる)

psエクセルに書き込む方法もありますか?Count#1の降順ですか?

+0

そのwhileループの字下げを正しくコピーしてもよろしいですか?インデントはPythonのシンタックスの一部です(ここを参照)(http://www.diveintopython.net/getting_to_know_python/indenting_code.html) –

+0

@lerenardこれをキャッチすることに感謝しました。インデントは、実際に実行するときれいです。 – uanaka

+0

あなたはまだインデントの外側に 'counter + = 1'部分があります。そのループは決して終わらないでしょう。 –

答えて

0

あなたは適切なGN=*値を使用してデータフレームに名前GNを持つ新しい列を挿入する必要があり

sheet1['GN'] = sheet1.Description.apply(lambda x: x.split('JIG')[1].split()[0])

を試みることができます。

特定の列からDataFrameを並べ替えるには、DataFrameをsheet1.sort('GN')で並べ替えることができます。

DataFrameをExcelファイルに保存するには、sheet1.to_excel('filename')を使用します。上記のsort関数を使用して、特定の列でソートされたファイルを書き込むことができます。