gpt4 book ai didi

python - Pandas DataFrame 构造函数在包含索引参数时引入 NaN

转载 作者:太空宇宙 更新时间:2023-11-04 03:39:32 26 4
gpt4 key购买 nike

我正在使用 DataFrame 构造函数创建一个 pandas DataFrame 对象。我的数据是列表和分类数据 Series 对象的字典。当我将索引传递给构造函数时,我的分类数据系列被重置为 NaN 值。这里发生了什么?提前致谢!

例子:

import pandas as pd
import numpy as np
a = pd.Series(['a','b','c'],dtype="category")
b = pd.Series(['a','b','c'],dtype="object")
c = pd.Series(['a','b','cc'],dtype="object")

A = pd.DataFrame({'A':a,'B':[1,2,3]},index=["0","1","2"])
AA = pd.DataFrame({'A':a,'B':[1,2,3]})
B = pd.DataFrame({'A':b,'C':[4,5,6]})

print("DF A:")
print(A)
print("\nDF A, without specifying an index in the constructor:")
print(AA)
print("\nDF B:")
print(B)

最佳答案

这与类别与对象无关,它与索引对齐有关。

您在 A 中得到 NaN,因为您告诉构造函数您需要三个字符串的索引。但是 a 有自己的索引,由整数 [0, 1, 2] 组成。由于它与您所说的索引不匹配,因此数据不对齐,因此您会得到一个带有您所说的索引的 DataFrame,而 NaN 会突出显示数据丢失。相比之下,B 只是一个列表,因此没有索引可以忽略,因此它假定数据是按索引适当的顺序给出的。

这可能比解释起来更容易理解。无论 dtype 是什么,如果索引不匹配,您将得到 NaN:

In [147]: pd.DataFrame({'A':pd.Series(list("abc"), dtype="category"),'B':[1,2,3]},
index=["0","1","2"])
Out[147]:
A B
0 NaN 1
1 NaN 2
2 NaN 3

In [148]: pd.DataFrame({'A':pd.Series(list("abc"), dtype="object"),'B':[1,2,3]},
index=["0","1","2"])
Out[148]:
A B
0 NaN 1
1 NaN 2
2 NaN 3

如果您使用完全匹配的索引,它会起作用:

In [149]: pd.DataFrame({'A':pd.Series(list("abc"), dtype="object"),'B':[1,2,3]},
index=[0,1,2])
Out[149]:
A B
0 a 1
1 b 2
2 c 3

如果您使用部分匹配的索引,您将在索引对齐的位置获得值,在不对齐的位置获得 NaN:

In [150]: pd.DataFrame({'A':pd.Series(list("abc"), dtype="object"),'B':[1,2,3]},
index=[0,1,10])
Out[150]:
A B
0 a 1
1 b 2
10 NaN 3

关于python - Pandas DataFrame 构造函数在包含索引参数时引入 NaN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27193186/

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