Python 将字符串列中的值相乘

Python 将字符串列中的值相乘,python,python-3.x,pandas,Python,Python 3.x,Pandas,我有一个以熊猫为单位的列。看起来是这样的: df.LotSizeDimensions.value_counts(dropna=False) 40.00X150.00 2 57.00X130.00

我有一个以熊猫为单位的列。看起来是这样的:

df.LotSizeDimensions.value_counts(dropna=False)

40.00X150.00                                                                                                 2
57.00X130.00                                                                                                 2
27.00X117.00                                                                                                 2
63.00X135.00                                                                                                 2
37.00X108.00                                                                                                 2
65.00X134.00                                                                                                 2
57.00X116.00                                                                                                 2
33x124x67x31x20x118                                                                                          1
55.00X160.00                                                                                                 1
63.00X126.00                                                                                                 1
36.00X105.50                                                                                                 1

在只有一个X的行中,我想创建一个单独的列,将值相乘。在有多个X的列中,我想返回一个零。这是我想出的密码

def dimensions_split(df: pd.DataFrame):
    df.LotSizeDimensions = df.LotSizeDimensions.str.strip()
    df.LotSizeDimensions = df.LotSizeDimensions.str.upper()
    df.LotSizeDimensions = df.LotSizeDimensions.str.strip('`"M')
    
    if df.LotSizeDimensions.count('X') > 1
         return 0
    df['LotSize'] = map(int(df.LotSizeDimensions.str.split("X", 1).str[0])*int(df.LotSizeDimensions.str.split("X", 1).str[1]))

这将返回以下错误:

TypeError: cannot convert the series to <class 'int'>

我还想添加一行,如果有X以外的任何非数字字符,则返回零。

想法是首先剥离并转换为上列LotSizeDimensions to Series,然后用于DataFrame,如果只有一个X,则返回多列0:


我通过列表理解得到:

import pandas as pd
df = pd.DataFrame(['40.00X150.00','57.00X130.00',
'27.00X117.00',
'37.00X108.00',
'63.00X135.00' ,
'65.00X134.00'  ,
'57.00X116.00'   ,
'33x124x67x31x20x118',
'55.00X160.00',
'63.00X126.00',
'36.00X105.50'])
df[1] = [float(str_data.strip().split("X")[0])*float(str_data.strip().split("X")[1]) if len(str_data.strip().split("X"))==2 else None for str_data in df[0]]

请发布一个小数据框,我们可以复制粘贴并使用它,而不是用文字描述您的数据。包含该示例数据的所需结果。若要将数据类型转换为数值,需要使用df[column].astypeint或pd.to,而不是将python int类强制转换为数据帧
import pandas as pd
df = pd.DataFrame(['40.00X150.00','57.00X130.00',
'27.00X117.00',
'37.00X108.00',
'63.00X135.00' ,
'65.00X134.00'  ,
'57.00X116.00'   ,
'33x124x67x31x20x118',
'55.00X160.00',
'63.00X126.00',
'36.00X105.50'])
df[1] = [float(str_data.strip().split("X")[0])*float(str_data.strip().split("X")[1]) if len(str_data.strip().split("X"))==2 else None for str_data in df[0]]