应用函数数据框列
Apply a function data frame column
我有一个数据框,其中第 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'
这里有很多问题,您的值是值列表的文字字符串:
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
我不知道这是不是有意为之,但您必须将其转换为列表。
其次,您的函数在整个 Series 上工作,但它一次需要一个行值,如果您想一次工作一行,则必须传递传递参数 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
我有一个数据框,其中第 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'
这里有很多问题,您的值是值列表的文字字符串:
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
我不知道这是不是有意为之,但您必须将其转换为列表。
其次,您的函数在整个 Series 上工作,但它一次需要一个行值,如果您想一次工作一行,则必须传递传递参数 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