2016-06-23 16 views
-1

私はcsvファイルを持っているもので、このようになり、いくつかの列:パンダでは列内のリストを使ってcsvファイルを読む方法は?

df = pd.DataFrame({'a':[['ID1','ID2','ID3'],['ID1','ID4'],[]],'b':[[8.6,1.3,2.5],[7.5,1.2],[]],'c':[[12,23,79],[42,10],[]]}) 

Out[1]:  a    b    c 
     0 [ID1, ID2, ID3] [8.6, 1.3, 2.5] [12, 23, 79] 
     1 [ID1, ID4]  [7.5, 1.2]  [42, 10] 
     2 []    []    [] 

事は、私がpandas.read_csvと、それを読んだとき、Pythonは文字列としてそれらの列を考慮することです。それらの列内の数字のリストであるというオプションを渡す方法はありますか? (おそらくいくつかdtype = something

PS:後でast.literal_evalとリストの理解をすることができますが、しばらく時間がかかりますので、私はcsvを読むとすぐに持っていきます。

PS2:元のcsvファイルは、それがliteral_evalにある程度の時間がかかる理由である(600 000行の長さで、その列は含まれています。

'ID of the project' 'postcode' 'city'  'len of the lists in the last 3 columns' 'ids of other projects' 'distance from initial project' 'jetlag from initial project' 
object    int   string  int          list of strings   list of floats     list of ints 
+4

解析するために元のCSVファイルに表示できますか? –

+0

元のcsvファイルの方法を追加しました。最後の3つの列のリストの長さは同じです(行ごとに異なります)。 – ysearka

+0

PS2の編集から、あなたはcsvが本当にリストの周りの角括弧を含んでいると思いますか? –

答えて

0

はこれを行うには、あなたがconvertersを利用することができますpd.read_csv機能(Documentation for read_csv

はあなたの例を使用して、

'ID of the project' 'postcode' 'city'  'len of the lists in the last 3 columns' 'ids of other projects' 'distance from initial project' 'jetlag from initial project' 
object    int   string  int          list of strings   list of floats     list of ints 

それはTHIで行うことができますsの方法:

import pandas as pd 
import ast 
generic = lambda x: ast.literal_eval(x) 
conv = {'ids of other projects': generic, 
     'distance from initial project': generic, 
     'jetlag from initial project': generic} 

df = pd.read_csv('your_file.csv', converters=conv) 

変換を使用する列を定義する必要がありますが、これは問題ではありません。

あなたのcsvインポート中にコンバータ機能が適用され、ファイルが大きくなりすぎると、常にCSVファイルを読み込むことができます。

+0

実際には読み込み時に正しい型を取得するのに役立ちますが、ラムダを使用することはあとでリスト内包より少し遅くなります(私はそれをテストしました)。 – ysearka

+0

これは、 'convertters 'を使ってこれを行うのは、読まないほうが遅いのですが、最後の列でリストの理解をしているのですか? 'df.apply'を使う?もしスピードが本当に問題であれば、リストを扱うことができる生データには異なるフォーマットを使うことを検討するかもしれません(多くのSQL変種ではほとんどありません) –

+0

リストの理解度は適用されません: 'df ['list_distances'] = [np.array df ['list_distances']] 'の中のxに対しては(ast.literal_eval(x))、実際には同じ結果が得られます。ありがとう、私はSQLベースを次に参照してください。 – ysearka

関連する問題