gpt4 book ai didi

pandas - 当一列有一些 NaN 条目时取消堆叠 Pandas 数据框

转载 作者:行者123 更新时间:2023-12-01 08:00:44 25 4
gpt4 key购买 nike

我有一个 Pandas DataFrame,我正在使用 unstack() 方法(如 this question 中的建议)将一些行条目旋转到列中。为此,我使用非透视列 set_index,然后调用 unstack() 来获取我真正想要的数据帧。

但是,如果索引的某些元素是 NaN,我会得到一些烦人的错误。有时我被告知索引有重复条目(这是不正确的),有时我被告知 NaN 不能转换为整数。这是一个例子

import pandas
from numpy import nan

df = pandas.DataFrame(
{'agent': {
17263: 'Hg',
17264: 'U',
17265: 'Pb',
17266: 'Sn',
17267: 'Ag',
17268: 'Hg'},
'change': {
17263: nan,
17264: 0.0,
17265: 7.070e-06,
17266: 2.3614e-05,
17267: 0.0,
17268: -0.00015},
'dosage': {
17263: nan,
17264: nan,
17265: nan,
17266: 0.0133,
17267: 0.0133,
17268: 0.0133},
's_id': {
17263: 680585148,
17264: 680585148,
17265: 680585148,
17266: 680607017,
17267: 680607017,
17268: 680607017}}
)
try:
dupe = df.copy().set_index(['s_id','dosage','agent'])
badDupe = dupe.unstack()
except Exception as e:
print( 'Error with all data was: %s'%(e,) )
try:
getnan = df.ix[17264:].copy().set_index(['s_id','dosage','agent'])
badNan = getnan.unstack()
except Exception as e:
print( 'Error dropping first entry was: %s'%(e,) )
df.dosage[:3]=42
willWork = df.copy().set_index(['s_id','dosage','agent'])
u = willWork.unstack()
print(u)

它的输出是

Error with all data was: Index contains duplicate entries, cannot reshape
Error dropping first entry was: cannot convert float NaN to integer

change
agent Ag Hg Pb Sn U
s_id dosage
680585148 42.0000 NaN NaN 0.000007 NaN 0
680607017 0.0133 0 -0.00015 NaN 0.000024 NaN

如您所见,如果我将 dosage 设置为 NaN(此处为 42)以外的其他值,则整形操作可以正常工作。

获得我寻求的 reshape 数据框的最佳方法是什么?我应该为剂量输入一个哨兵值,然后再替换吗?这似乎...不够优雅。

最佳答案

在没有 df.dosage[:3]=42 的情况下在 pandas 0.16 版本中执行您的代码,它有效:

In [1405]: u
Out[1405]:
change
agent Ag Hg Pb Sn U
s_id dosage
680585148 NaN NaN NaN 0.000007 NaN 0
680607017 0.0133 0 -0.00015 NaN 0.000024 NaN

关于pandas - 当一列有一些 NaN 条目时取消堆叠 Pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18854034/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com