Python 3.x 熊猫:单元格列表中的每个值都要小写
我有一个这样的数据帧Python 3.x 熊猫:单元格列表中的每个值都要小写,python-3.x,pandas,dataframe,Python 3.x,Pandas,Dataframe,我有一个这样的数据帧 # initialize list of lists data = [[1, ['ABC', 'pqr']], [2, ['abc', 'XY']], [3, np.nan]] # Create the pandas DataFrame data = pd.DataFrame(data, columns = ['Name', 'Val']) data Name Val 0 1 [ABC, pqr] 1 2 [abc, XY] 2
# initialize list of lists
data = [[1, ['ABC', 'pqr']], [2, ['abc', 'XY']], [3, np.nan]]
# Create the pandas DataFrame
data = pd.DataFrame(data, columns = ['Name', 'Val'])
data
Name Val
0 1 [ABC, pqr]
1 2 [abc, XY]
2 3 NaN
我试图将列表中的每个值都转换为小写
data['Val'] = data['Val'].apply(lambda x: np.nan if len(x) == 0 else [item.lower() for item in x])
data
但是我得到了这个错误
TypeError: object of type 'float' has no len()
预期最终产出
Name Val
0 1 [abc, pqr]
1 2 [abc, xy]
2 3 NaN
第一个想法是过滤行而不丢失值和处理:
m = data['Val'].notna()
data.loc[m, 'Val'] = data.loc[m, 'Val'].apply(lambda x: [item.lower() for item in x])
print (data)
Name Val
0 1 [abc, pqr]
1 2 [abc, xy]
2 3 NaN
或者,您只能处理由isinstance
过滤的列表
:
f = lambda x: [item.lower() for item in x] if isinstance(x, list) else np.nan
data['Val'] = data['Val'].apply(f)
print (data)
Name Val
0 1 [abc, pqr]
1 2 [abc, xy]
2 3 NaN
你必须避开
NaN
,看看。如果x是np.NaN,你可以使用lambda x:np.NaN,否则[item.lower()表示x中的项]
。亨利,你的答案是正确的,如果您能将其作为answer@Max我犯了什么错误我也犯了这个错误-TypeError:“float”对象不可编辑
我也犯了这个错误-TypeError:“float”对象不可编辑
@HardikGupta-问题在于样本数据?问题在于我的数据,而不是样本数据,我无法复制我拥有的列表,它将其标识为float,而不是floatlist@HardikGupta-因此需要将f=lambda x:[item.lower()用于x中的项]如果isinstance(x,list)else np.nan
更改为f=lambda x:[item.lower()用于x中的项]如果不是isinstance(x,float)else np.nan
?