【问题标题】:extract digits from a column and put them in an empty column as an int range in a dataframe pandas从列中提取数字并将它们作为数据框 pandas 中的 int 范围放在一个空列中
【发布时间】:2021-01-29 10:42:12
【问题描述】:

我正在尝试遍历数据框中的列('winning_numbers'),然后使用 for 循环逐行将第一个和最后一个数字作为空列('win_num_range')中的 int 范围。我确信以前有人问过这个问题,但鉴于所涉及的语法和方法,我找不到有效的答案。

import pandas as pd 
  
# Define a dictionary containing employee data 
data = {'winning_numbers':['12, 15, 36, 46, 55', '3, 10, 56, 67, 69'], 

#this is ideally what I want the OUTPUT to be below
        'win_num_range':[(12, 55), (3, 69)]} 
  
# Convert the dictionary into DataFrame  
df = pd.DataFrame(data) 

# been trying it this way, but I am sure there are any numbers of ways, so please help kindly I am kinda new

for ind, row in df.iterrows():
  df.loc[ind, 'win_num_range'] = lambda x : range(x[0],x[4]),df.loc['winning_numbers'].values```

【问题讨论】:

    标签: python-3.x pandas dataframe for-loop


    【解决方案1】:

    你可以试试这个解决方案:

    如果你真的想要字符串格式的范围信息:

    df['win_num_range'] = df['winning_numbers'].apply(lambda x: 'range(' + str(min(map(int,x.split(',')))) + ', ' + str(max(map(int,x.split(',')))) + ')')
    
    

    如果你需要作为元组,那么你应该这样做:

    df['win_num_range'] = df['winning_numbers'].apply(lambda x: (min(map(int,x.split(','))), max(map(int,x.split(',')))))
    

    如果你需要作为范围:

    df['win_num_range'] = df['winning_numbers'].apply(lambda x: range(min(map(int,x.split(','))), max(map(int,x.split(',')))))
    
    

    使用 apply 和 lambda 函数来评估每一行。

    split(',') 创建一个列表,其中包含 wins_numbers 列中的值。

    这种方法允许您使用 min 和 max 以您想要的格式提供信息。

    【讨论】:

    • 不,正在寻找 int,这样我就可以更轻松地将其用于机器学习,但感谢您的建议,它帮助我缩小了视野
    • 我已经更新了我的答案,请检查它是否解决了您的问题。
    猜你喜欢
    • 2019-05-05
    • 1970-01-01
    • 2021-10-17
    • 2021-01-07
    • 2022-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多