gpt4 book ai didi

python - Pandas 应用并映射到每一列的每个元素

转载 作者:太空宇宙 更新时间:2023-11-04 00:34:42 26 4
gpt4 key购买 nike

如果值不为空,如何将自定义函数应用于每一列的每个元素?

假设我有一个 10 列的数据框,如果是 pd.notnull(x),我想对其中的每个元素应用 lower() 函数,如果是 pd.notnull(x),否则只保留 none 作为值。

我试过这样使用,

s.apply(lambda x: change_to_lowercase(x), axis = 1)

def change_to_lowercase(s):

s['A'] = s['A'].map(lambda x: x.lower() if pd.notnull(x) else x)
s['B'] = s['B'].map(lambda x: x.lower() if pd.notnull(x) else x)
s['C'] = s['C'].map(lambda x: x.lower() if pd.notnull(x) else x)
s['D'] = s['D'].map(lambda x: x.lower() if pd.notnull(x) else x)
return s

但是因为我的列是混合数据类型(即 NaN 为 float,其余为 unicode)。这给我一个错误-

float has no attribute map.

如何摆脱这个错误?

最佳答案

我想你需要DataFrame.applymap因为按元素工作:

L = [[1.5, 'Test', np.nan, 2], ['Test', np.nan, 2,'TEST'], ['Test', np.nan,1.5,  2]]
df = pd.DataFrame(L, columns=list('abcd'))
print (df)

a b c d
0 1.5 Test NaN 2
1 Test NaN 2.0 TEST
2 Test NaN 1.5 2

cols = ['a','b']
#for python 2 change str to basestring
df[cols] = df[cols].applymap(lambda x: x.lower() if isinstance(x, str) else x)
print (df)
a b c d
0 1.5 test NaN 2
1 test NaN 2.0 TEST
2 test NaN 1.5 2

关于python - Pandas 应用并映射到每一列的每个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44557151/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com