我的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)