我开始学习python,numpy和panda,我有一个关于尺寸的基本问题。
请参阅下一个代码块:
1。长度:6,dtype:int64
private ChildEventListener mChildEventListener;
private ChildEventListener mChildEventListener2;
List<ChatMessage> ChatMessages = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
...
mMessageAdapter = new MessageAdapter(this, R.layout.item_message_sent, ChatMessages);
mMessageListView.setAdapter(mMessageAdapter);
mChildEventListener = new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
if(i == 0) {
current_last_key = dataSnapshot.getKey();
}
else {
ChatMessage chatMessage = dataSnapshot.getValue(ChatMessage.class);
mMessageAdapter.add(chatMessage);
}
i++;
}
...
};
Query messagesQuery = mDatabaseReference.child("chat_messages").
child(chatId).limitToLast(25);
messagesQuery.addChildEventListener(mChildEventListener);
...
}
@Override
public void onClick(View v) {
j = 0;
mChildEventListener2 = new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
if(!dataSnapshot.getKey().equals(current_last_key)) {
if (j == 0) {
current_last_key = dataSnapshot.getKey();
}
else {
ChatMessage chatMessage = dataSnapshot.getValue(ChatMessage.class);
ChatMessages.add(j- 1, chatMessage);
}
}
else
{
ChatMessage chatMessage = dataSnapshot.getValue(ChatMessage.class);
ChatMessages.add(0 , chatMessage);
loadMoreTextView.setVisibility(View.GONE);
}
mMessageAdapter.notifyDataSetChanged();
j++;
}
... };
Query query = mDatabaseReference.child("chat_messages").
child(chatId).orderByKey().endAt(current_last_key).limitToLast(10);
query.addChildEventListener(mChildEventListener2);
}
VS
2。长度:6,dtype:int32
# create a Series from a dict
pd.Series({key: value for key, value in zip('abcdef', range(6))})
问题 所以我认为当你在pd.Series中放置一个列表,numpy数组,字典等时你会得到int64但是当你在pd.Series中只放置范围(6)时你会得到int32。有人可以让我对此有点清楚吗?
对不起这个非常基本的问题。
@Edit:我正在使用Pandas版本0.20.1和Numpy 1.12.1
答案 0 :(得分:4)
它们在语义上的不同之处在于,在第一个版本中,您传递带有单个标量值的dict,因此dtype变为int64
,对于第二个版本,您传递range
,可以进行常规转换到一个numpy数组,这是int32
:
In[57]:
np.array(range(6)).dtype
Out[57]: dtype('int32')
所以pandas series
的构造涉及第一个实例中的dtype匹配而第二个实例没有匹配,因为它可以转换为numpy数组,而numpy确定在这种情况下首选int32
< / p>
<强>更新强>
看起来这取决于您的numpy
版本和pandas
版本。
我正在运行python 3.6,numpy 1.12.1和pandas 0.20.3,我得到了上面的结果。我也在运行Windows 7 64位
@jeremycg正在运行pandas 0.19.2
和numpy
1.11.2并观察到相同的结果,而@coldspeed正在运行numpy
1.13.1并观察int64
。
从中可以看出dtype
很大程度上取决于numpy
的作用。
我相信在这种情况下我们通过range
时会调用此line。
subarr = np.array(arr, dtype=object, copy=copy)
返回的类型由numpy
和OS确定,在我的情况下,windows已将C Long定义为32位。请参阅相关内容:numpy array dtype is coming as int32 by default in a windows 10 64 bit machine