将字符串列中的值相乘

2024-09-30 06:33:35 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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以外的任何非数字字符,则返回零


Tags: false密码dfvaluedef单位intdimensions
2条回答

想法是首先剥离并转换到上列LotSizeDimensionsSeries,然后对DataFrame使用^{},如果只有一个X,则返回多个列0

s = df.LotSizeDimensions.str.strip('`"M ').str.upper()

df1 = s.str.split('X', expand=True).astype(float)
#general data
#df1 = s.str.split('X', expand=True).apply(lambda x: pd.to_numeric(x, errors='coerce'))
df['LotSize'] = np.where(s.str.count('X').eq(1), df1[0] * df1[1], 0)
print (df)
      LotSizeDimensions  LotSize
0          40.00X150.00   6000.0
1          57.00X130.00   7410.0
2          27.00X117.00   3159.0
3          37.00X108.00   3996.0
4          63.00X135.00   8505.0
5          65.00X134.00   8710.0
6          57.00X116.00   6612.0
7   33x124x67x31x20x118      0.0
8          55.00X160.00   8800.0
9          63.00X126.00   7938.0
10         36.00X105.50   3798.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]]

相关问题 更多 >

    热门问题