You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将DataFrame中B列的分数格式字符串转换为float类型?

Convert Mixed Number Strings to Float in Pandas DataFrame

Got it, let's figure out how to turn those mixed number strings like '16-1/4' into proper float values in your DataFrame's B column. These are basically whole numbers plus fractions, so we just need to parse each part and do the math. Here are a few reliable approaches depending on your needs:

Method 1: Custom Helper Function (Straightforward & Safe)

This is my go-to for clarity, especially if you might have edge cases to handle. We'll write a function that breaks down each string, calculates the total value, and can include error handling if needed.

import pandas as pd

def mixed_str_to_float(mixed_str):
    # Split the string into whole number and fraction components
    whole_num, fraction = mixed_str.split('-')
    # Split the fraction into numerator and denominator
    numerator, denominator = fraction.split('/')
    # Compute the total float value
    return int(whole_num) + int(numerator) / int(denominator)

# Apply the function to column B
df['B'] = df['B'].apply(mixed_str_to_float)

If you expect some invalid entries (like strings that don't follow the X-Y/Z format), add a try-except block to avoid crashes:

def mixed_str_to_float_safe(mixed_str):
    try:
        whole_num, fraction = mixed_str.split('-')
        numerator, denominator = fraction.split('/')
        return int(whole_num) + int(numerator) / int(denominator)
    except (ValueError, AttributeError):
        # Return NaN for invalid values to keep the column numeric
        return pd.NA

Method 2: Shortcut with str.replace and eval (For Trusted Data)

If you're 100% sure your data doesn't contain any malicious or malformed strings, this one-liner is super concise. We just replace the '-' with '+' so the string becomes a valid arithmetic expression, then let eval compute it:

df['B'] = df['B'].str.replace('-', '+').apply(eval)

For example, '16-1/4' turns into '16+1/4', which eval evaluates to 16.25. Quick and dirty, but never use this with untrusted input (since eval executes arbitrary code).

Method 3: Vectorized Operations (Fast for Large Datasets)

If you're working with a huge DataFrame, vectorized operations will outperform apply by a lot. We'll split the column into parts, convert to numeric types, then compute the total in bulk:

# Split B into whole number and fraction columns
df[['whole', 'frac']] = df['B'].str.split('-', expand=True)
# Split the fraction into numerator and denominator
df[['num', 'den']] = df['frac'].str.split('/', expand=True)

# Convert all temporary columns to integers
df[['whole', 'num', 'den']] = df[['whole', 'num', 'den']].astype(int)

# Calculate the float value for B
df['B'] = df['whole'] + df['num'] / df['den']

# Clean up temporary columns if you don't need them
df = df.drop(['whole', 'frac', 'num', 'den'], axis=1)

This method avoids looping through each row, making it much faster for large datasets.


内容的提问来源于stack exchange,提问作者yeungcase

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 20:13:13