如何将Pandas DataFrame中多类型值转换为整数(含单位转换与格式修正)
我来帮你搞定这个Pandas数据格式转换的问题——混合了字符串、整数、浮点数的object列确实容易让人头疼,咱们分场景一步步解决。
一、处理长度列的多格式转换
你的长度列有好几种情况,得逐个判断处理,最稳妥的方式是写一个自定义转换函数,用apply()批量处理每一行的值。
自定义转换函数思路
我们需要覆盖所有给定的场景:
- 识别并标记无效值
'No value known' - 把带逗号的字符串(比如
'47,587')转换成可计算的数值(这里默认逗号是小数分隔符,符合欧洲格式) - 对整数或
.0结尾的浮点数直接转成整数 - 对小数(比如
101.1)乘以1000转成米单位后再转整数
代码实现
import pandas as pd def convert_length(value): # 处理无有效值的情况,返回可空NA(也可以保留原字符串,按需调整) if isinstance(value, str) and value.strip() == 'No value known': return pd.NA # 处理带逗号的字符串,替换为小数点后转浮点数 if isinstance(value, str): cleaned_value = value.replace(',', '.') try: value = float(cleaned_value) except ValueError: # 如果是其他无法转换的字符串,也返回NA return pd.NA # 处理数值类型的情况 if isinstance(value, (int, float)): # 判断是否是整数(包括.0结尾的浮点数) if value.is_integer(): return int(value) else: # 小数转米单位后转整数,这里用int()直接取整,如需四舍五入可以用round() return int(value * 1000) # 其他未知情况返回NA return pd.NA # 应用到你的长度列,假设列名为'length' df['length'] = df['length'].apply(convert_length)
说明
- 用
pd.NA标记无效值,方便后续过滤或填充,如果你想保留原字符串'No value known',直接返回原字符串即可 - 加入了
try-except捕获无法转换的异常字符串,避免整个转换过程崩溃 - 小数转米后用
int()取整,如果你需要四舍五入,把int(value * 1000)改成round(value * 1000)就行
二、处理其他整数列的
.0后缀转换 对于那些原本是整数但偶尔出现.0浮点数的列,处理起来更简单,核心是先确保数值类型正确,再转成可空整数类型(避免NaN报错)。
方法一:用pd.to_numeric+可空整数类型
这种方法适合列中可能存在NaN的情况:
# 假设列名为'other_integer_col' df['other_integer_col'] = pd.to_numeric(df['other_integer_col'], errors='coerce').astype('Int64')
pd.to_numeric(errors='coerce')会把无法转换的值转成NaNastype('Int64')是Pandas的可空整数类型,既能把.0转成整数,又能保留NaN
方法二:直接转整数(无NaN时用)
如果你的列里没有缺失值或无效值,直接用astype(int)就可以:
df['other_integer_col'] = df['other_integer_col'].astype(int)
方法三:用lambda函数处理
也可以用lambda快速判断转换:
df['other_integer_col'] = df['other_integer_col'].apply( lambda x: int(x) if isinstance(x, float) and x.is_integer() else x )
内容的提问来源于stack exchange,提问作者Stijn
相关产品推荐
相关产品推荐

