说我在python中有两个pandas系列:
import pandas as pd
h = pd.Series(['g',4,2,1,1])
g = pd.Series([1,6,5,4,"abc"])
我可以用h创建一个DataFrame,然后将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
但是现在假设我有一个空的DataFrame,我尝试将h追加到它:
df2 = pd.DataFrame([])
df3 = df2.append(h, ignore_index=True)
这不起作用。我认为问题出现在倒数第二行的代码中。我需要以某种方式定义空白DataFrame以获得适当数量的列。
顺便说一句,我试图这样做的原因是我使用requests + BeautifulSoup从互联网上抓文本,我正在处理它并尝试一次将它写入一行DataFrame。
答案 0 :(得分:8)
因此,如果您没有将空列表传递给DataFrame构造函数,那么它可以工作:
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
,没有任何内容object
:
In [21]:
df = pd.DataFrame()
print(df.index.dtype)
df = pd.DataFrame([])
print(df.index.dtype)
object
int64
我不清楚上面为什么会影响行为(我在这里猜测)。
<强>更新强>
重新访问后,我可以确认这是我在pandas版本0.12.0
中的错误,因为您的原始代码运行正常:
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 0.13.1
运行pandas 1.8.1
和numpy 3.3.5.0
64位但是我认为问题是熊猫但我会升级两只熊猫和numpy以保证安全,我不要我认为这是一个32位与64位的python问题。