2017-01-11 3 views
0

私はdict d = {}を作成し、Webページをループし、各ページのデータをd[i]に格納します。各ページのデータは約20列と100行のデータです。終了したら、私は任意の数の索引を持つことができます。私が持っている問題は、いくつかのページが重複していることです。したがってd[3]d[4]は重複している可能性があります。変換不明個々のデータフレームへのDictインデックスの数

私は最終的にはそうのようなデータフレームに各インデックスに変換:

df1 = d[0] 
    df1 = pd.DataFrame(df1[0]) 

私はインデックスの数を知っていれば、私は次のように1つのデータフレームに変換する方法を知っている:

dfs = len(d) 
    #Union dataframes 
    if dfs == 4: 
    df1 = d[0] 
    df2 = d[1] 
    df3 = d[2] 
    df4 = d[3] 
    df1 = pd.DataFrame(df1[0]) 
    df2 = pd.DataFrame(df2[0]) 
    df3 = pd.DataFrame(df3[0]) 
    df4 = pd.DataFrame(df4[0]) 
    df = pd.concat([df1,df2,df3,df4]) 

しかし、 、私はいつもその数を知らない。不明な数のインデックスに対してこれを行い、重複したページを削除する方法はありますか?私は可変オブジェクト名を使ってforループを作成することを考えていましたが、おそらくそれについて行く最良の方法ではないことは分かっています。

答えて

0

これはd内のすべてのiを取り、i[0]DataFrameを行い、その後、同様の状況でpd.concat

df = pd.concat(list(map(pd.DataFrame, (i[0] for i in d.values())))) 
+0

私はそのコードを実行すると、私は次のエラーを取得する: 'DF = pd.concat(リスト(マップ(pd.DataFrame、私は[0] d.valuesのI()))のための)' ^ 'SyntaxError:ジェネレータの式は唯一の引数でなければカッコで囲む必要があります.' –

+0

@ d84_n1nj4 Fixed –

+0

Webページからデータを引き出す際にループ内で実行するか、複数のインデックスを持つdictを作成した後?私はそれを後に走らせ、 'df'は私に' d [0] 'の等価物を与えます。 –

0

にそれらのDataFrameのリストを渡し、私は次のようにこの問題についての行ってきました:

def convert_dict_to_frame(dict): 
    dict_list = [] 
    frame_list = [] 
    for key in dict.keys(): 
    if dict[key] not in dict_list: 
     dict_list.append(dict[key]) 
    for x in dict_list: 
    frame_list.append(pd.DataFrame(x)) 
    df = pd.concat(frame_list) 
    return df 

私はそれが完了するのがより遅い方法かもしれないと認めますが、それは私のために働いています。

+0

このコードを使用すると、 'df'を見ると' d [0] 'の各列のインデックスが含まれています。私は 'd [1]'、 'd [2]'などからデータを見ていません。 –

+0

Hmm。あなたの辞書がどのように構成されているかのサンプルを教えてもらえますか?私はこれをより詳細に見てみたいと思います。 –

関連する問題