【问题标题】:invalid literal for int() with base 10: while trying to create a dataframe with split '_'基数为 10 的 int() 的无效文字:尝试使用拆分“_”创建数据帧时
【发布时间】:2021-11-19 11:43:40
【问题描述】:

我正在尝试通过使用特殊字符下划线“_”拆分文件名的不同部分来向现有数据框添加一列。

下面是我的数据框的截图。

现在我想将另一列添加到现有数据框中,该列在“_”之后和 .jpg 之前具有值,例如 row1 中的 1 和 row2 中的 10。

下面是我正在使用的代码,但我收到错误invalid literal for int() with base 10: combined

master_df = pd.DataFrame()
master_df['filename'] = combined_faces_image_names
master_df['age'] = master_df['filename'].map(lambda img_name : np.uint8(img_name.split("_")[0]))

有人可以帮帮我吗?

【问题讨论】:

  • combined_faces.zip 的预期结果是什么?还是100_a.png

标签: python regex for-loop lambda split


【解决方案1】:

该错误实际上告诉您,拆分 combined_faces.zip 后出现的 33486 行中的单词 combined 无法转换为 int。

尝试从 DataFrame 中删除此行,然后进行转换和拆分,或者为此目的仅定位包含 .jpg 行的行:

master_df['age'] = master_df['filename'].map(lambda img_name: np.uint8(img_name.split("_")[0]) if '.jpg' in img_name else None)

【讨论】:

    【解决方案2】:

    您可以使用pandas.Series.str.extract 来完成此任务,缩小示例:

    import pandas as pd
    df = pd.DataFrame({'name':['100_1.jpg','100_10.jpg','combined_faces.zip']})
    df['value'] = df['name'].str.extract(r'(\d+).jpg$')
    

    打印(df)

    output
                     name value
    0           100_1.jpg     1
    1          100_10.jpg    10
    2  combined_faces.zip   NaN
    

    解释:提取一个或多个 (+) 数字 (\d) 后跟 .jpg 和字符串结尾 ($)。请注意,在上面的示例值中(不是NaN)是strs。如果你需要数字,你可以使用pandas.to_numeric如下

    df['value'] = pd.to_numeric(df['name'].str.extract(r'(\d+).jpg$',expand=False))
    

    【讨论】:

      【解决方案3】:

      我会使用 try and except 方法进行提取 对于这个问题,我也可能只是遍历第一列

      import pandas as pd
      
      master_df = pd.DataFrame()
      master_df['filename'] = combined_faces_image_names
      
      extract = []
      for i in master_df['filename']:
          offset = i.index("_")
          num = i[offset+1:-4]
          # -4 to leave out the .jpg
          try:
              extract.append(int(num))
          except ValueError:
              extract.append("")
      
      master_df['Age'] = extract
      

      【讨论】:

        猜你喜欢
        • 2016-11-10
        • 1970-01-01
        • 1970-01-01
        • 2013-05-31
        • 2018-03-13
        • 1970-01-01
        • 1970-01-01
        • 2021-06-25
        • 1970-01-01
        相关资源
        最近更新 更多