Numpy函数,例如np.mean(),np.var()等,接受类似数组的参数,如np.array或list等.
但是传递大熊猫数据框也有效.这意味着pandas数据帧确实可以伪装成一个numpy数组,我觉得有点奇怪(尽管知道df的底层值确实是numpy数组).
对于一个像数组一样的对象,我认为它应该可以使用整数索引来切割numpy数组的方式.因此,例如df [1:3,2:3]应该可以工作,但这会导致错误.
因此,当数据帧进入函数内部时,可能会将数据帧转换为numpy数组.但如果是这种情况那么为什么np.mean(numpy_array)会导致与np.mean(df)不同的结果呢?
a = np.random.rand(4,2)
a
Out[13]:
array([[ 0.86688862, 0.09682919],
[ 0.49629578, 0.78263523],
[ 0.83552411, 0.71907931],
[ 0.95039642, 0.71795655]])
np.mean(a)
Out[14]: 0.68320065182041034
Run Code Online (Sandbox Code Playgroud)
给出了与下面给出的结果不同的结果......
df = pd.DataFrame(data=a, index=range(np.shape(a)[0]),
columns=range(np.shape(a)[1]))
df
Out[18]:
0 1
0 0.866889 0.096829
1 0.496296 0.782635
2 0.835524 0.719079
3 0.950396 0.717957
np.mean(df)
Out[21]:
0 0.787276
1 0.579125
dtype: float64
Run Code Online (Sandbox Code Playgroud)
前一个输出是单个数字,而后一个是列方式.numpy函数如何知道数据帧的构成?
用常量值初始化数据帧不起作用,
pd.DataFrame(0, index=[1,2,3]) # doesnt work!
# OR
pd.DataFrame(0) # doesnt work!
Run Code Online (Sandbox Code Playgroud)
而我观察到
(1)使用常数初始化Series
pd.Series(0, index=[1,2,3]) # Works fine!
Run Code Online (Sandbox Code Playgroud)
(2)使用None初始化DataFrame是可行的
pd.DataFrame(None, index=[1,2,3]) # Works fine!
Run Code Online (Sandbox Code Playgroud)
(3)在不提供索引和列的情况下初始化DataFrame
pd.DataFrame([1, 2, 3]) # Works fine!
pd.DataFrame([0]) # Works fine!
Run Code Online (Sandbox Code Playgroud)
有人知道为什么吗?
我希望从设计考虑中了解更多信息,而不是像“如果您检查熊猫代码,您会发现它未能通过其中一项数据尺寸应大于1.的检查”之类的答案,就会知道更多信息。 。
我认为它应该只是直观地工作(考虑到熊猫在不提供默认col和index的情况下很聪明,还可以从给定的数据中猜测尺寸)。
可能有某种原因导致此行为,但无法确定。