逐列應用功能IN-地點編輯:
In [194]: df = pd.DataFrame({"A": ["FOO","BAAR","FOO"], "B": ["FOO","BAR" , "FOO"]})
In [195]: df.loc[:,["A","B"]].apply(lambda col : col.str.lower(), axis = 0) # axis= 0, Default in pandas
Out[195]:
A B
0 foo foo
1 baar bar
2 foo foo
逐行應用功能就地編輯,如果需要的話:使用逐列和行嚮應用功能
In [201]: df.loc[:,["A","B"]].apply(lambda row : row.str.lower(), axis = 1)
Out[201]:
A B
0 foo foo
1 baar bar
2 foo foo
其他有用的操作:
# For column-wise operation using apply function:
In [224]: df = pd.DataFrame({"A": ["FOO","BAAR","FOO"], "B": ["FOO","BAR" , "FOO"]})
In [225]: df.loc[:,["A","B"]].apply(lambda col : col.str.lower() + "_" + "cool" + "_" + df["B"])
Out[225]:
A B
0 foo_cool_FOO foo_cool_FOO
1 baar_cool_BAR bar_cool_BAR
2 foo_cool_FOO foo_cool_FOO
#Note only second element from each column is taken as an argument for lambda function, so NaN for others:
In [226]: df.loc[:,["A","B"]].apply(lambda col : col[1:2].str.lower() + "_"+ "cool" + "_" + df["B"])
Out[226]:
A B
0 NaN NaN
1 baar_cool_BAR bar_cool_BAR
2 NaN NaN
#For Row-wise operation (row[0] & row[1] points to first and second element of each row,
#or can be called as row["A"] $ row["B"] respectively):
In [207]: df.loc[:,["A","B"]].apply(lambda row : row["B"].lower() + "_" + row["A"].lower() , axis = 1)
Out[207]:
0 foo_foo
1 bar_baar
2 foo_foo
dtype: object
In [208]: df.loc[:,["A","B"]].apply(lambda row : row[1].lower() + "_" + row[0].lower() , axis = 1)
Out[208]:
0 foo_foo
1 bar_baar
2 foo_foo
dtype: object
#Here, row[1] indicates second element of each row, i.e row["B"] :
In [235]: df.loc[:,["A","B"]].apply(lambda row : row.str.lower() + "_"+ row[1], axis = 1)
Out[235]:
A B
0 foo_FOO foo_FOO
1 baar_BAR bar_BAR
2 foo_FOO foo_FOO
這是偉大的。理想情況下,我想要這樣做'就地'可以說,而不是子集。現在使用你的答案很簡單:'df [['B','D']] = df [['B','D']]。apply(function)' – RDJ
好聽,如果我的答案解決了問題請接受 – EdChum