2017-10-30 15 views
1

ファイルから読み込んだリストのリストからurlsの列を持つデータフレームを生成しようとしています。これは私がしようとしているものです:リストのリストが正しく流出しない2つのアイテムを追加したデータフレームに追加する

one_df= pd.DataFrame() 
with open(r"product_Url.txt", 'r') as infile: 
    l = [x.split(',') for x in infile] 
    for x in zip(*l): 
     df = pd.DataFrame(list(x), columns=['url']) 
     one_df = one_df.append(df, ignore_index=True) 
    print(one_df) 
    one_df.to_csv(outfile) 

私の出力での問題は、(例えば)このように見える2つのURLで私の出力に数行があるということです。

0, ['http://www.ex.com/prod1' 
1, 'http://www.ex.com/prod2' 
2, 'http://www.ex.com/prod3']['http://www.ex.com/prod25' 
3, 'http://www.ex.com/prod43'['http://www.ex.com/prod99'] 

私の元にはファイルから読み込んだデータを開始する(ただし、複数のURLを持つ)このように見えた:

[" ['https://www.ex.com/prod1', 'https://www.ex.com/prod2','https://www.ex.com/prod3']['https://www.ex.com/prod2','https://www.ex.com/prod3']['https://www.ex.com/prod25,'https://www.ex.com/prod43']['http://www.ex.com/prod99']"] 

私はデータフレームにファイルから直接それを読んしようとしたとき、私は空のデータフレームとすべてのURLに1つのカラムを得ました。したがって、私はループでデータフレームを生成しようとしました。

行ごとに1つではなく2つのURLを持つこれらのケースを取り除くには、何が必要ですか?

+0

を削除すると、それらをスキップしますか? – 0p3n5ourcE

+0

それぞれのURLを1行にまとめたいと思います。 1つの行に2つのURLの代わりに、これらのケースの1つがあるたびに、URLは別の行に分かれている必要があります。 – ChiChi

答えて

1

これは効率的な方法ではないかもしれないが、[]を交換しているとdataframeが作成された場所が、次の提供の例を見ると働くことがあります。

one_df= pd.DataFrame() 
with open("product_Url.txt", 'r') as infile: 
    l = [x.replace(']', ',').replace("[",'').replace('"','').replace('\n','').strip().split(',') for x in infile] 
    for x in zip(*l): 
     df = pd.DataFrame(list(x), columns=['url']) 
     one_df = one_df.append(df, ignore_index=True) 
    one_df = one_df[one_df.url.str.len()>0] 
    print(one_df) 
    one_df.to_csv(outfile) 

結果:また

      url 
0 'https://www.ex.com/prod1' 
1 'https://www.ex.com/prod2' 
2 'https://www.ex.com/prod3' 
3 'https://www.ex.com/prod2' 
4 'https://www.ex.com/prod3' 
5 'https://www.ex.com/prod25 
6 'https://www.ex.com/prod43' 
7 'http://www.ex.com/prod99' 

少し清潔な解決策は:

with open('product_Url.txt') as data_file:  
    data = json.load(data_file) 

all_data = [element.replace('[','').replace(']',',').strip().split(',') for element in data] 

one_df = pd.DataFrame({'url':all_data[0]}) 
one_df = one_df[one_df.url.str.len()>0] 
one_df.to_csv(outfile) 
関連する問題