请求解析DataFrame中代码行uniques = data.apply(lambda x: [x.unique])的功能
理解 Pandas DataFrame 中
data.apply(lambda x: [x.unique]) 的作用 Hey there! Let's break down this line of code step by step, because I can tell you're probably aiming to get unique values from your DataFrame columns—and there's a tiny tweak needed to make it work as intended.
逐部分拆解原代码
data.apply(...): 在 Pandas 里,apply方法会默认沿着列方向(axis=0)对 DataFrame 的每一列执行传入的函数。每次 lambda 运行时,参数x代表的就是原 DataFrame 中的一整列(也就是一个 Series 对象)。lambda x: [x.unique]: 这里是关键问题所在——x.unique指向的是方法本身,而不是执行这个方法后得到的结果。把它放进列表里,只是把这个方法的引用存进了列表,并没有真正调用它去获取唯一值。
原代码的实际输出
如果直接运行这行代码,你得到的会是一个 Series,每个元素都是一个包含方法对象的列表,完全不是你想要的唯一值。举个例子,输出大概长这样:
col0 [<bound method Series.unique of 0 1\n1 2\n2... col1 [<bound method Series.unique of 0 a\n1 b\n2... dtype: object
这种结果对分析数据没有任何帮助。
修正后的正确写法
如果你的目标是获取每一列的唯一值数组,只需要给 unique 加上括号,调用这个方法就行:
uniques = data.apply(lambda x: x.unique())
修正后会返回一个 Series,每个元素对应原 DataFrame 列的唯一值数组,比如:
col0 [1, 2, 3] col1 ['a', 'b', 'c'] dtype: object
另外,如果你只需要每一列唯一值的数量,Pandas 有更高效的内置方法:
unique_counts = data.nunique()
要是你更习惯用字典来映射列名和对应的唯一值,这种写法也很清晰:
uniques_dict = {col: data[col].unique() for col in data.columns}
总结
你写的原代码核心意图很明确——提取 DataFrame 每一列的唯一值,但因为少加了括号,导致它存的是方法引用而非实际结果。补上这个小细节,代码就能完全符合你的预期了!
内容的提问来源于stack exchange,提问作者Dfhaa_DK
相关产品推荐
相关产品推荐

