根据条件更改具有混合类型的数据帧列中的值



数据集的一列同时具有字符串和浮点值。在该列中,对于每个字符串,我都试图将其仅替换为字符串的前5个字符。

def isfloat(num):
try:
float(num)
return True
except ValueError:
return False
df = pd.DataFrame([[1, "Alligator"], [1, 3], [4, "Markets"]], columns=['A', 'B'])

以下两种方法似乎不会改变实际的数据帧。

df['B'].apply(lambda x: float(x) if isfloat(x) else x[0:5])
for index, row in df.iterrows():
if not isfloat(row.B):
row.B = row.B[0:5]

下一个方法产生警告"0";无法将序列转换为<类"float">";,我认为是因为isfloat方法不能以这种方式调用。

df['B'] = np.where(not isfloat(df['B']), df['B'][0:5], df['B'])

我也尝试过使用.loc,但由于我需要更改的条件,它似乎不合适。该如何处理,或者我缺少什么?

我认为您需要:

df['B']=df['B'].apply(lambda x: float(x) if isfloat(x) else x[0:5])

由于DataFrames未在位编辑。

输出:

A      B
0  1  Allig
1  1    3.0
2  4  Marke

Hi首先,所有数据帧都没有进行编辑。您只需要存储df的编辑值。在df中再次显示B列。B列。

df.B=df.B.apply(lambda x: float(x) if isfloat(x) else x[0:5])

也可以使用以下代码:

import pandas as pd
df = pd.DataFrame([[1, "Alligator"], [1, 3], [4, "Markets"]], columns=['A', 'B'])
newlist=[]   
for v in df.B:
if type(v)==str:
newlist.append(v[:5])
else:
newlist.append(v)
df['B']=newlist

相关内容

最新更新