1

私は多くの要素から Python で辞書を作成していますが、そのうちのいくつかは nan であり、それらを辞書にまったく追加したくありません (データベースに挿入するので、したくないからです)。意味をなさないフィールド)。

現時点では、次のようなことをしています。

data = pd.read_csv("data.csv")

for i in range(len(data)):
    mydict = OrderedDict([("type", "mydata"), ("field2", data.ix[i,2]), ("field5", data.ix[i,5])])

    if not math.isnan(data.ix[i,3]):
        mydict['field3'] = data.ix[i,3]

    if not math.isnan(data.ix[i,4]):
        mydict['field4'] = data.ix[i,4]

    if not math.isnan(data.ix[i,8]):
        mydict['field8'] = data.ix[i,8]

    etc....

条件付きで挿入したいフィールド名とフィールド番号の配列を定義するなど、よりフラットな構造で行うことはできますか?

4

3 に答える 3

3
>>> fields = [float('nan'),2,3,float('nan'),5]
>>> {"field%d"%i:v for i,v in enumerate(fields) if not math.isnan(v)}
{'field2': 3, 'field1': 2, 'field4': 5}

または順序付き辞書:

>>> OrderedDict(("field%d"%i,v) for i,v in enumerate(fields) if not math.isnan(v))
OrderedDict([('field1', 2), ('field2', 3), ('field4', 5)])
于 2013-06-20T00:16:22.713 に答える
1

これはあなたが探していたものですか?

data = pd.read_csv("data.csv")

for i in range(len(data)):
    mydict = OrderedDict([("type", "mydata"), ("field2", data.ix[i,2]), ("field5", data.ix[i,5])])
    # field numbers
    fields = [3,4,8]
    for f in fields:
        if not math.isnan(data.ix[i,f]):
            mydict['field'+str(f)] = data.ix[i,f]
于 2013-06-20T00:08:18.850 に答える
1
conditional_fields = ((3, 'field3'), (4, 'field4'), (8, 'field8'))

for i in range(len(data)):
    mydict = OrderedDict([("type", "mydata"), ("field2", data.ix[i,2]), ("field5", data.ix[i,5])])
    for (index, fieldname) in conditional_fields:
        if not math.isnan(data.ix[i, index]):
            mydict[fieldname] = data.ix[i, index]

実際のフィールド名は文字通り「field8」などではないと想定しています。

于 2013-06-20T00:08:19.950 に答える