2016-11-17 16 views
1

私は非常にファンダです。今まで私はcsvファイルを使ってパンダを学んでいて、スプレッドシートを勉強してきました。pandasデリートしていないテキストファイルをデータフレームに読み取る

今私は、テキストファイルをデータフレームに変換することに直面しています。テキストファイルは私が逐次データと呼ぶものです。ファイルの形式は次のとおりです。

State Name 
City Name 
State Name 
City Name 
City Name 
City Name 
... 

50州と米国のすべての地域がリストされていますが、都市の数はさまざまです。私は、私は、少なくともデータフレームにファイルを読み込むことができました()メソッドread_tableパンダを使用して

[[State Name, City Name1],[State Name, City Name2],...] 

のようなデータフレームにこれを変換する必要があるが、今私はにそれを取得する方法かどうか分かりません正しい州名都市名の形式。

また、州名/州2の文字略語の辞書もあります。辞書の形式は

{'OH':'OHIO', 'KY':'Kentucky',...} 

この辞書を使用する方法はありますか?またはこれを達成するためのより簡単な方法がありますか?テキストファイルのサンプル テキストファイルのサンプルを以下にリストされている -

はあなたに

EDITありがとうございます。また、ファイルを変更できないようにしてください。

Alabama[edit] 
Auburn (Auburn University)[1] 
Florence (University of North Alabama) 
Jacksonville (Jacksonville State University)[2] 
Livingston (University of West Alabama)[2] 
Montevallo (University of Montevallo)[2] 
Troy (Troy University)[2] 
Tuscaloosa (University of Alabama, Stillman College, Shelton State)[3][4] 

Tuskegee (Tuskegee University)[5] 
Alaska[edit] 
Fairbanks (University of Alaska Fairbanks)[2] 
Arizona[edit] 
Flagstaff (Northern Arizona University)[6] 
Tempe (Arizona State University) 
Tucson (University of Arizona) 
+0

@ayhan 。何かがあれば、あなたが引用した質問は重複としてマークされるべきです。この質問はその前に尋ねられ答えられました。ちょうど –

答えて

3

あなたの列がAと呼ばれていると言ってください。今すぐ参加

states = df.groupby(csum).first() 
states 
Out[38]: 
       A 
A     
1 Alabama[edit] 
2 Alaska[edit] 
3 Arizona[edit] 

cities = df.groupby(csum).apply(lambda g: g[1:]) 
cities 
Out[39]: 
                 A 
A              
1 1      Auburn (Auburn University)[1] 
    2    Florence (University of North Alabama) 
    3  Jacksonville (Jacksonville State University)[2] 
    4   Livingston (University of West Alabama)[2] 
    5   Montevallo (University of Montevallo)[2] 
    6       Troy (Troy University)[2] 
    7 Tuscaloosa (University of Alabama, Stillman Co... 
    8     Tuskegee (Tuskegee University)[5] 
2 10  Fairbanks (University of Alaska Fairbanks)[2] 
3 12  Flagstaff (Northern Arizona University)[6] 
    13     Tempe (Arizona State University) 
    14      Tucson (University of Arizona) 

:今、あなたは国や都市を取得することができます

csum = df.A.str.contains('\[edit\]').cumsum() 
csum 
Out[26]: 
0  1 
1  1 
2  1 
3  1 
4  1 
5  1 
6  1 
7  1 
8  1 
9  2 
10 2 
11 3 
12 3 
13 3 
14 3 

df.A.str.contains('\[edit\]') 
Out[25]: 
0  True 
1  False 
2  False 
3  False 
4  False 
5  False 
6  False 
7  False 
8  False 
9  True 
10 False 
11  True 
12 False 
13 False 
14 False 

使用cumsum状態+都市ごとのインデックスを定義するには:このような状態はまず見つけますデータフレーム:

states.join(cities, rsuffix='_cities') 
Out[49]: 
        A           A_cities 
A                  
1 1 Alabama[edit]      Auburn (Auburn University)[1] 
    2 Alabama[edit]    Florence (University of North Alabama) 
    3 Alabama[edit]  Jacksonville (Jacksonville State University)[2] 
    4 Alabama[edit]   Livingston (University of West Alabama)[2] 
    5 Alabama[edit]   Montevallo (University of Montevallo)[2] 
    6 Alabama[edit]       Troy (Troy University)[2] 
    7 Alabama[edit] Tuscaloosa (University of Alabama, Stillman Co... 
    8 Alabama[edit]     Tuskegee (Tuskegee University)[5] 
2 10 Alaska[edit]  Fairbanks (University of Alaska Fairbanks)[2] 
3 12 Arizona[edit]   Flagstaff (Northern Arizona University)[6] 
    13 Arizona[edit]     Tempe (Arizona State University) 
    14 Arizona[edit]      Tucson (University of Arizona) 
+0

これは素晴らしい答えです。ペンシルベニア州にカリフォルニアという都市があることが判明したとき、これは私を助けました。 –

+0

@PaulStoner大歓迎です! – Boud

3

私は(state_name, city_name)組で占めcitiesリストを作成し、DataFrameにタプルのリストを回します。

このため、テキストファイルに表示されるすべての状態のプリコンパイルされたリストが必要です。ファイルカーソルがステートラインまたは都市ラインにあるときを識別できるようにします。

cities = [] 
list_of_states = ['Alaska', ..., 'Ohio', ...] 

with open('file.csv') as f: 
    for line in f: 
     if line in list_of_states: 
      state = line 
     else: 
      cities.append((state, line)) 

df = pandas.DataFrame(cities) 
+1

と言って@Javinそれは動作します。助けてくれてありがとう –

+0

@Javin私はあなたに受け入れられた答えを変更するために心から謝ります。あなたは完全に受け入れられる答えであり、非常に簡単に実装されています。実際には、あなたの答えは、私と同じ名前の都市を見つけるために私を導いた。 –

+0

@PaulStoner問題はありません、私は自分自身で今受け入れられている答えをupvoted – Jivan

関連する問題