pycharm 在《Pandas》词典中为关键词编索引时,值变成了“难”

p4rjhz4m  于 2022-11-23  发布在  PyCharm
关注(0)|答案(2)|浏览(152)

我正在努力成为一个自学成才的数据分析师。在Pandas中,当我在代码的第二部分索引不同的名字时,值从450变成了Nan,从500变成了Nan,380变成了380.0(浮点数)。同时,dtype从int64变成了float64。你知道为什么会发生这种情况吗?如果我从w3schools复制一个例子,它显示得很好。

import numpy as np
import pandas as pd

calories= {"Day 1": 450, "Day 2": 500, "day 3": 380}
new_series= pd.Series(calories)
print(new_series)

**#Second part of code**
new_series_1= pd.Series(calories, index=["day 1", "day 2", "day 3"])
print(new_series_1)
fsi0uk1n

fsi0uk1n1#

我试了你的代码。这是一个简单的修复。Python,像很多程序一样是区分大小写的。你只需要修改你的语句。
更改自:

new_series_1= pd.Series(calories, index=["day 1", "day 2", "day 3"])

至:

new_series_1= pd.Series(calories, index=["Day 1", "Day 2", "day 3"])

注意大写字母。
当我确保列名匹配时,我得到了类似的输出。

Day 1    450
Day 2    500
day 3    380
dtype: int64
Day 1    450
Day 2    500
day 3    380
dtype: int64

希望能有所帮助。
祝你好运

rjee0c15

rjee0c152#

tl;dr

new_series_1中,calories键与index值不匹配,并且正在使用后者重新索引Series,因此出现NaNfloat64

说明

首先用calories初始化new_series,它是一个具有int值的dict

calories= {"Day 1": 450, "Day 2": 500, "day 3": 380}
new_series= pd.Series(calories)

所以Pandas知道它们最好被当作int64
然后在index中设置2个不同的值,day 1day 2,不大写:

new_series_1= pd.Series(calories, index=["day 1", "day 2", "day 3"])

calories的键和index的值之间不再有对应关系,所以Pandas默认为float64以进行最佳猜测。事实上,docs中的一个例子表明:
使用指定的索引从字典构造系列

d = {'a': 1, 'b': 2, 'c': 3}
ser = pd.Series(data=d, index=['a', 'b', 'c'])
ser
a   1
b   2
c   3
dtype: int64

字典的键与索引值匹配,因此索引值无效。

d = {'a': 1, 'b': 2, 'c': 3}
ser = pd.Series(data=d, index=['x', 'y', 'z'])
ser
x   NaN
y   NaN
z   NaN
dtype: float64

请注意,索引首先是使用字典中的键构建的。在此之后,使用给定的索引值重新索引Series,因此我们得到的结果是所有NaN
在这里,它解释了何时基于Index更改dtype

**如果dtype是None,我们会寻找最适合数据的dtype。**如果提供了实际的dtype,我们会胁迫使用该dtype(如果安全的话)。否则,会引发错误。

相关问题