数据框单元格中的两个数字,试图将它们转换为均值

Two numbers in a cell of a dataframe, trying to convert them in the mean

此图像是从数据帧中提取的。

     col1                                                  col2   
0   Apple iPhone X - 64GB - Gris Espacial (Libre)          319,00        
1   IPHONE X 64GB/256GB, ENVIO DESDE ESPAÑA, GARAN.        355,00 459,00       

我想做的是: 将单元格 355.00 459.00 转换为两个数字的平均值,有更多单元格有两个数字,总是两个,我想以相同的方式更改,所以我想为所有情况制作一段代码不只是一个数字。

       col1                                               col2   
0   Apple iPhone X - 64GB - Gris Espacial (Libre)         319,00        
1   IPHONE X 64GB/256GB, ENVIO DESDE ESPAÑA, GARAN.       407

谢谢。

尝试将字符串表示形式转换为浮点数列表。检查 to_floats 方法以获得解决方案。用空格分开。将 , 替换为 . 以使其可由 float 解析。 pandas 中的单元格可以包含列表。我们使用 np.mean:

取浮点数列表的平均值
import pandas as pd
import numpy as np

df = pd.DataFrame({ 'c' : ['1,0 2,0', '3,0'] })

def to_floats(s):
    '''Helper method to convert a string containing multiple
    numbers with commas into a list of floats.'''
    return [float(x.replace(',', '.')) for x in s.split()]

df['c'] = df['c'].apply(lambda x: np.mean(to_floats(x)))

如果该列包含空字符串 '',它们将被转换为 NaN。您需要决定这对您的应用程序是否有意义。

在pandas中,您可以进行以下操作

  1. 如果单元格中的数据是 object.str 格式,则将它们转换为每个单元格的整数列表

  2. 现在检查每个单元格中列表的长度。如果长度大于 1,则取其平均值,否则只取列表中的唯一元素。


def col2_transformation(cell_data):
    # I am assuming that cell data is in string format
    #   and numbers are separated by space
    if ' ' in cell_data:
        int_list = list(map(int, cell_data.split(' '))
        return sum(int_list) / len(int_list)
    elif cell_data:
        return int(cell_data)
    else:
        return 0 # setting a default value in case input is None


df['col2'] = df['col2'].map(col2_transformation)