Pandas to_records()数据类型转换为字符/ unicode问题

f0brbegy  于 2022-11-27  发布在  其他
关注(0)|答案(2)|浏览(224)

Pandas to_records()抛出一个错误,而numpy.array的行为符合预期。

data = [('myID', 5), ('myID', 10)]
myDtype = numpy.dtype([('myID', numpy.str_,4),
                       ('length', numpy.uint16)])

工作中:

arr = numpy.array(data, dtype=myDtype)
output: [('myID',  5) ('myID', 10)]

这是行不通的

df = pd.DataFrame(data)
df = df.to_records(index=False, column_dtypes=myDtype)

ValueError:基数为10的int()的文字无效:'我ID'
我在干什么?我在干什么?

xqkwcwgp

xqkwcwgp1#

据我所知,您编写变量myDtype的方式与 Dataframe 中的列名不兼容。
您当前的dataframe列是int值0和1,导致您的错误(尝试将int 0与您的命名"myID"匹配)。(* 不完全确定这个问题,因此可能有人想补充,我将编辑答案。*)
我可以通过使用字典引用column_dtypes来删除该错误:

data = [("myID", 5), ("myID", 10)]
    myDtype = numpy.dtype([('myID', numpy.str_, 4),
                       ('length', numpy.uint16)])
    df = pd.DataFrame(data, columns=["myID", "length"])
    df_records = df.to_records(index=False, column_dtypes={"myID": "<U4", "length": "<u2"})

结果如下:

rec.array([('myID',  5), ('myID', 10)],
          dtype=[('myID', '<U4'), ('length', '<u2')])
ymdaylpp

ymdaylpp2#

pandas dataframeto_records()函数中的column_dtypes参数需要dict数据类型作为其输入。但您传递的myDtype作为参数,其类型为numpy.dtype
试试这个,应该有用-

df = pd.DataFrame(data, columns=["myID", "length"])
df_rec = df.to_records(index = False, column_dtypes = {"myID": "<U4", "length": "<u2"})

输出为-

>>> df_rec
rec.array([('myID',  5), ('myID', 10)],
          dtype=[('myID', '<U4'), ('length', '<u2')])

相关问题