用自己的值更新DataFrame值条件



我的df带有浮街号码,有时是" nan"或" X-Y"(例如:30-32(,但通常是X.Y(例如:32.0而不是30(我需要将其更改为INT(如果没有"当然没有"(。我尝试了

chunk.loc["-" not in chunk["Street Number"] & chunk["Street Number"].notna(), 'Street Number'] = chunk["Street Number"].astype(int)

我知道我的" ="有一个问题。符号。如何以其自身的价值更新数据框架值?我还尝试了

chunk[["Street Number"]].astype(int)

没有错误

DF的样本:

0 |nan

1 |1.0

2 |6.0

3 |170.0

4 |61.0

5 |51-52

我试图强迫dtype"街道号码":np.uint16,但我有ValueRor:整数列在第12列中具有NA值

使用更改的cedric H.解决方案,但输出是混合字符串,整数,浮点(NaN(S:

def convert_street_number_values(x):
    try:
        x = float(x)
        if x.is_integer():
            return int(x)
        else:
            return x
    except Exception:
        return x
chunk = pd.DataFrame({'Street Number':[np.nan, '1.0', '6.0', '170.0', '61.0', '51-52']})
chunk['Street Number'] = chunk['Street Number'].apply(convert_street_number_values)
print (chunk)
  Street Number
0           NaN
1             1
2             6
3           170
4            61
5         51-52

编辑:

问题是如果多个不同的组 - 然后熊猫将列转换为整数,但是如果至少有一个 NaN s值,它将转换回floats

解决所有数据的解决方案都转换为strings

def convert_street_number_values(x):
    try:
        x = float(x)
        if x.is_integer():
            return str(int(x))
        else:
            return str(x)
    except Exception:
        return str(x)

因为使用可用的整数数据类型可以转换为具有丢失值的整数:

chunk['Street Number'] = chunk['Street Number'].astype('Int64')

,但如果至少字符串值失败。

因此,如果将所有非数字转换为 NaN s,则有效:

chunk['Street Number'] = pd.to_numeric(chunk['Street Number'], errors='coerce').astype('Int64')

我会做这样的事情:

def convert_street_number_values(v):
    # Add more complex 'rules' as you need
    try:
        return int(v)
    except Exception:
        return v
df['Steet Number'].apply(convert_street_number_values)

最新更新