2017-04-20 12 views
2

私は超基本的な問題と思われるものを持っていますが、解決策を見つけることができません。要は、数値のリストであるcsvの列があります。このcsvpandasで生成されました。to_csvです。 read_csvでそれを読み取ろうとすると、この番号のリストは自動的にstringに変換されます。ストリングのリストをパンダの浮動小数点のリストに変換する

それを使用しようとすると、明らかにエラーが発生します。私がto_numeric機能を使用しようとすると、それはリストであり、単一の数字ではないのでエラーが発生します。

これを解決する方法はありますか?フォームについては、以下のコードを投稿、おそらく非常に有用ではない:

def write_func(dataset): 
    features = featurize_list(dataset[column]) # Returns numpy array 
    new_dataset = dataset.copy() # Don't want to modify the underlying dataframe 
    new_dataset['Text'] = features 
    new_dataset.rename(columns={'Text': 'Features'}, inplace=True) 
    write(new_dataset, dataset_name) 

def write(new_dataset, dataset_name): 
    dump_location = feature_set_location(dataset_name, self) 
    featurized_dataset.to_csv(dump_location) 

def read_func(read_location): 
    df = pd.read_csv(read_location) 
    df['Features'] = df['Features'].apply(pd.to_numeric) 

Features列が問題の一つです。私はread_func現在applyを実行しようとすると、私はこのエラーを取得:

ValueError: Unable to parse string "[0.019636873200000002, 0.10695576670000001,...]" at position 0 

私はこの問題に遭遇する最初の人にはできません、読み取り/書き込み時にこれを処理する方法はありますか?

答えて

2

literal_evalconverterとしてpd.read_csvに渡します。以下はその動作の例です。

from ast import literal_eval 
form io import StringIO 
import pandas as pd 

txt = """col1|col2 
a|[1,2,3] 
b|[4,5,6]""" 

df = pd.read_csv(StringIO(txt), sep='|', converters=dict(col2=literal_eval)) 
print(df) 

    col1  col2 
0 a [1, 2, 3] 
1 b [4, 5, 6] 
+0

これは安全ですか? 'literal_eval'はかなり私をスケッチしています。私はここで入力ファイルを完全に制御することはできません。それらはリモートサーバーからプルダウンされます。 –

+0

私は 'eval'によって同様にスケッチされています...' literal_eval'は、リテラルを安全に解析することによって恐怖を緩和することを意図しています。参照してください[***この投稿は***](http://stackoverflow.com/a/15197698/2336654) – piRSquared

+0

これは...実行可能ですが、これは本当にそれを行うための唯一の方法ですか?非常に基本的なユースケースのように感じるもののためには非常に難解です。これをクリアするには*動作します。 –

0

私はあなたの最後の機能を少し変更しても問題ありません。

def read_func(read_location): 
    df = pd.read_csv(read_location) 
    df['Features'] = df['Features'].apply(lambda x : pd.to_numeric(x)) 
+0

パフォーマンス上の理由により、これは私にとっては扱いにくいものです。これは私が変換しているかなり大きなファイルで、これはすべてのリストのすべてのエントリを繰り返します。 –

関連する問題