【问题标题】:is there a function in python to convert this object in to integerspython中是否有一个函数可以将此对象转换为整数
【发布时间】:2021-05-20 13:01:41
【问题描述】:

我正在尝试将列“奖励级别”转换为 int 类型,它似乎被列为对象类型。

我试过了

.astype(int)

ValueError: int() 以 10 为底的无效文字:'25,50,100,250,500,1,000,2,500'

还有:

tuple(map(int, df['reward levels'].split(',')))

AttributeError: 'Series' 对象没有属性 'split'

最终:

**pd.to_numeric(df['奖励等级'])

ValueError:无法解析位置 0** 处的字符串“25,50,100,250,500,1,000,2,500”

https://drive.google.com/file/d/0By26wLpAqHfQaF9Jb19RUFVnNjA/view

链接到数据。在此先感谢我是新手。

【问题讨论】:

  • 但这不是int。这是一系列ints,它们的长度甚至都不一样。你希望 pandas 用这个做什么?
  • 可能是df['reward levels'].str.split()?
  • 或者也许df.explode('reward levels')
  • 你能发布实际数据吗?如果最后一个数字是 10002500,则很难确定在此 '25,50,100,250,500,1,000,2,500' 中逗号是作为分隔符还是数字格式
  • 建议将您的数据添加为文本,我们不能从图像中复制内容。您可以执行df[:5].to_dict() 并将输出添加到问题中。

标签: python pandas dataframe data-analysis


【解决方案1】:

查看您的数据后,似乎reward levels 具有, 分隔值,前面带有$ 符号或NaN,所以您可以做的是,对于reward levels 的每个值:

  1. 删除所有$ 符号,您可以简单地将它们替换为空字符串''
  2. 用逗号,分割每个值,你会得到整数列表作为字符串列表
  3. reward levels 中的每一行调用pd.to_numeric
df['reward levels'] = df['reward levels'].str.replace('$', '', regex=False).str.split(',').apply(pd.to_numeric)

输出

1                                       [1, 5, 10, 25, 50]
2        [1, 10, 25, 40, 50, 100, 250, 1, 0, 1, 337, 9, 1]
3        [1, 10, 25, 30, 50, 75, 85, 100, 110, 250, 500...
4                              [10, 25, 50, 100, 150, 250]
                               ...                        
45952                                        [20, 50, 100]
45953    [1, 5, 10, 25, 50, 50, 75, 100, 200, 250, 500,...
45954                                   [10, 25, 100, 500]
45955                         [15, 16, 19, 29, 29, 39, 75]
45956    [25, 25, 50, 100, 125, 250, 500, 1, 250, 2, 50...
Name: reward levels, Length: 45957, dtype: object

此外,如果您希望将每个列表项放在单独的行中,您可以使用explode

df.explode('reward levels')

输出

0         25
0         50
0        100
0        250
0        500
        ... 
45956    250
45956      2
45956    500
45956      5
45956      0
Name: reward levels, Length: 416706, dtype: object

【讨论】:

    【解决方案2】:

    这取决于您想要的输出格式。如果您只想将字符串拆分为逗号分隔值并将它们转换为整数,您可以使用:

    data = {'reward_levels': {0: '25,50,100,250,500,1,000,2,500',
      1: '25,50,10',
      2: '15,16,19,22'}}
    
    df = pd.DataFrame(data)
    df.apply(lambda x: [int(j) for j in x.reward_levels.split(",")], axis=1)
    

    但结果可能不是你想要的:

    0    [25, 50, 100, 250, 500, 1, 0, 2, 500]
    1                             [25, 50, 10]
    2                         [15, 16, 19, 22]
    

    更典型的做法是为每个单元格/索引设置一个值。您可以分解为多列,也可以复制为行;后者可能更可取,因为您的数组长度不等:

    df.reward_levels.str.split(",", expand=True)
    

    输出:

        0   1    2     3     4     5     6     7     8
    0  25  50  100   250   500     1   000     2   500
    1  25  50   10  None  None  None  None  None  None
    2  15  16   19    22  None  None  None  None  None
    

    df.reward_levels.str.split(",").explode().astype(int)
    

    输出:

    0     25
    0     50
    0    100
    0    250
    0    500
    0      1
    0      0
    0      2
    0    500
    1     25
    1     50
    1     10
    2     15
    2     16
    2     19
    2     22
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-14
      • 2012-03-22
      • 2022-11-21
      • 2017-08-07
      • 2012-04-19
      • 2017-04-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多