应用函数数据框列

时间:2015-02-19 13:00:01

标签: pandas

我有一个数据框,其中第4列包含ASCII值。

mydict=[('1385145553847005',
  '54',
  'NPAVIN',
  '9175042231172',
  '[89,111,117,114,32,78,80,65,86,32,79,110]',
  '20131123000914',
  'NA',
  'NA',
  '0',
  '0',
  'NA',
  'undefined',
  'a4d05539-cd61-43ee-a870-702e20caeaff',
  '0',
  '0',
  '0'),
('1385145553847006',
  '55',
  'NPAVIN1',
  '9175042231171',
  '[78,80,65,86,32,79,110]',
  '20131123000915',
  'NA',
  'NA',
  '0',
  '0',
  'NA',
  'undefined',
  'a4d05539-cd61-43ee-a870-702e20caeaff',
  '0',
  '0',
  '0')
] 

import pandas as pd
df = pd.DataFrame(mydict)

我编写了一个需要应用于第4列的函数。

def get_ascii(amyl):
    mys=''
    for item in amyl:
        mys= mys+(chr(int(item)))
    return mys

这不起作用。我得到了值错误:

df.apply(get_ascii(df[4]))

预期成果: 应将以下2个值添加到数据框的最后一列。

'Your NPAV On'
'NPAV On'

1 个答案:

答案 0 :(得分:1)

这里存在许多问题,您的值是值列表的文字字符串:

In [295]:

df[4]
Out[295]:
0    [89,111,117,114,32,78,80,65,86,32,79,110]
1                      [78,80,65,86,32,79,110]
Name: 4, dtype: object

我不知道这是否有意,但您必须将其转换为列表。

其次你的函数正在处理整个系列,但是如果你想在传递参数axis=1时传递一行,那么它一次只需要一行值。

无论如何,下面的工作是评估传入的系列,访问该系列中唯一的元素值,评估为列表然后执行音译:

In [294]:

import ast
def get_ascii(amyl):
    l = ast.literal_eval(amyl.values[0])
    mys=''
    for item in l:
        mys= mys+(chr(item))           
    return mys
df[[4]].apply(get_ascii, axis=1)
Out[294]:
0    Your NPAV On
1         NPAV On
dtype: object
相关问题