熊猫:在将字典分成列时应用函数

时间:2016-01-12 12:24:57

标签: python pandas

我定义了一个函数如下......

def getSentiment(x):
    vs = vaderSentiment
    col = vs(x['messages'].encode('utf-8', 'replace'))
    return col

我正在应用函数的DataFrame列包含每行的单个字符串(两个示例)......

There are some classic 'Cat' ones about seatbelts
That would be the fighters steroids… I've told you

当我使用...

应用该功能时
df['sentiment']=df.apply(getSentiment, axis=1)

该函数产生的dicts在新的情绪列中转换为字符串格式(两行作为示例)...

sentiment
{'compound': 0.4404, 'neg': 0.0, 'neu': 0.919, 'pos': 0.081} 
{'compound': 0.4404, 'neg': 0.0, 'neu': 0.256, 'pos': 0.744}

有没有办法应用函数,以便dict中的键值对作为单独的列(除了其他变量之外)返回,如下所示:

compound    neg    neu      pos
0.4404      0.0    0.919    0.081
0.4404      0.0    0.256    0.744

除此之外,我还尝试使用DataFrame.from_dict并在此处搜索其他一些答案,但似乎没有什么适用。

1 个答案:

答案 0 :(得分:1)

如果列generateLink()的值为字符串,您可apply函数ast.literal_eval将其转换为sentiment

dictionary

如果列import ast print df # sentiment tmp #0 {'compound': 0.4404, 'neg': 0.0, 'neu': 0.919,... aa #1 {'compound': 0.4404, 'neg': 0.0, 'neu': 0.256,... sss print type(df['sentiment'][0]) #<type 'str'> df1 = df['sentiment'].apply(lambda x: pd.Series(ast.literal_eval(x))) print df1 # compound neg neu pos #0 0.4404 0 0.919 0.081 #1 0.4404 0 0.256 0.744 的值为词典

sentiment