pandas 什么是“1500”?

9jyewag0  于 2023-03-11  发布在  其他
关注(0)|答案(1)|浏览(155)

我从一个字符串格式的网站抓取数据,我替换了字符串字符,现在数据只包含数字。但是当我想将此列转换为数字时,我得到了该错误。我有两列,第一列是previous_prices,另一列是now_prices。如果现在产品不在销售中,则程序用previous_prices填充nas。Previous_prices类型为int 64,now_prices类型为object。错误为:值错误:以10为基数int()的文本无效:“1500”。
实际上,我看到了一个类似的问题,但该问题与“\u200d1500”无关。
| 填充后的当前价格na|
| - ------|
| 小行星1450|
| ‍一千五百|
| 七百|
| 小行星1700|
| 二○九零|
当我将now_prices更改为整数,然后用previous_prices填充na时,出现了奇怪的情况。一般数据类型是int。但当我想将该数据导出到Excel时,我得到了这个错误。我无法理解问题。

lrl1mhuk

lrl1mhuk1#

由于\u200d不是可打印字符,因此以下是删除它并转换为整数的解决方案:

df = pd.DataFrame({'now_prices_after_fillna':['1450', u'\u200d1500']})
    
print (df)
  now_prices_after_fillna
0                    1450
1                   ‍1500

#https://stackoverflow.com/a/54451873/2901002
import sys

# build a table mapping all non-printable characters to None
NOPRINT_TRANS_TABLE = {
    i: None for i in range(0, sys.maxunicode + 1) if not chr(i).isprintable()
}

def make_printable(s):
    """Replace non-printable characters in a string."""

    # the translate method on str removes characters
    # that map to None from the string
    return s.translate(NOPRINT_TRANS_TABLE)

df['now_prices_after_fillna'] = (df['now_prices_after_fillna'].apply(make_printable)
                                                              .astype(int))
print (df)
   now_prices_after_fillna
0                     1450
1                     1500

另一个想法是,如果混合数字与字符串值添加try与except语句:

df = pd.DataFrame({'now_prices_after_fillna':['1450', u'\u200d1500', 1000]})
    
print (df)

#https://stackoverflow.com/a/54451873/2901002
import sys

# build a table mapping all non-printable characters to None
NOPRINT_TRANS_TABLE = {
    i: None for i in range(0, sys.maxunicode + 1) if not chr(i).isprintable()
}

def make_printable(s):
    """Replace non-printable characters in a string."""

    # the translate method on str removes characters
    # that map to None from the string
    try:
        return s.translate(NOPRINT_TRANS_TABLE)
    except AttributeError:
        return s

df['now_prices_after_fillna'] = (df['now_prices_after_fillna'].apply(make_printable)
                                                              .astype(int))
print (df)
   now_prices_after_fillna
0                     1450
1                     1500
2                     1000

测试您的真实的数据:
一个二个一个一个

相关问题