Python-pandas-Append系列到空白数据框中

Python-pandas-Append系列到空白数据框中,python,matrix,pandas,dataframe,Python,Matrix,Pandas,Dataframe,假设我有两个python熊猫系列: import pandas as pd h = pd.Series(['g',4,2,1,1]) g = pd.Series([1,6,5,4,"abc"]) 我可以创建一个只有h的数据帧,然后将g附加到其中: df = pd.DataFrame([h]) df1 = df.append(g, ignore_index=True) 我得到: >>> df1 0 1 2 3 4 0 g 4 2 1 1 1

假设我有两个python熊猫系列:

import pandas as pd
h = pd.Series(['g',4,2,1,1])
g = pd.Series([1,6,5,4,"abc"])
我可以创建一个只有h的数据帧,然后将g附加到其中:

df = pd.DataFrame([h])
df1 = df.append(g, ignore_index=True)
我得到:

>>> df1
   0  1  2  3    4
0  g  4  2  1    1
1  1  6  5  4  abc
但是现在假设我有一个空的数据帧,并且我尝试将h附加到它:

df2 = pd.DataFrame([])
df3 = df2.append(h, ignore_index=True)
这是行不通的。我认为问题出在代码的倒数第二行。我需要以某种方式定义空白数据框,以得到正确的列数。< /P>
顺便说一句,我之所以尝试这样做,是因为我使用requests+BeautifulSoup从internet上抓取文本,并对其进行处理,试图将其一次写入一行数据帧。

因此,如果您不将空列表传递给数据帧构造函数,则它可以工作:

In [16]:

df = pd.DataFrame()
h = pd.Series(['g',4,2,1,1])
df = df.append(h,ignore_index=True)
df
Out[16]:
   0  1  2  3  4
0  g  4  2  1  1

[1 rows x 5 columns]
这两种构造函数方法之间的区别似乎在于,索引
dtypes
的设置不同,如果列表为空,则它是
Int64
,没有任何内容,它是
对象

In [21]:

df = pd.DataFrame()
print(df.index.dtype)
df = pd.DataFrame([])
print(df.index.dtype)
object
int64
我不清楚为什么上述因素会影响行为(我在这里猜测)

更新

再次访问此版本后,我可以确认这在我看来是pandas版本
0.12.0
中的一个bug,因为您的原始代码工作正常:

In [13]:

import pandas as pd
df = pd.DataFrame([])
h = pd.Series(['g',4,2,1,1])
df.append(h,ignore_index=True)

Out[13]:
   0  1  2  3  4
0  g  4  2  1  1

[1 rows x 5 columns]

我使用python运行pandas
0.13.1
和numpy
1.8.1
64位
3.3.5.0
,但我认为问题在于pandas,但我会升级pandas和numpy以确保安全,我认为这不是32位与64位python的问题。

如果你想要一个空的数据帧,你只需要
df=pd.dataframe()
那么,当你传递一个空列表时,你的代码工作得很有趣。数据帧索引默认为
Int64
,但它仍然是空的,当你不传递任何内容时,它默认为
对象
不清楚为什么这应该很重要。你认为我的索引与你的不同吗?如果我尝试此修复,代码仍然不起作用。您使用的熊猫版本是什么?我的是0.13.16比特它是0.12.0比特。不确定它是否是64位。我只是尝试了一下,出于某种原因,即使我像你说的那样定义数据帧,它仍然不起作用。