Python-pandas-добавить серию в пустой фрейм данных

скажем, у меня есть две серии панд в 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)

это не работает. Я думаю, проблема в предпоследней строке кода. Мне нужно как-то определить пустой фрейм данных, чтобы иметь правильное количество столбцов.

кстати, причина, по которой я пытаюсь это сделать, заключается в том, что я соскабливаю текст из интернета, используя запросы+BeautifulSoup, и я обрабатываю его и пытаюсь записать его в фрейм данных по одной строке за раз.

1 ответов


поэтому, если вы не передаете пустой список конструктору 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]

я бегу панд 0.13.1 и numpy 1.8.1 64-бит с использованием python 3.3.5.0 но я думаю, что проблема в пандах, но я бы обновил как панд, так и numpy, чтобы быть в безопасности, я не думаю, что это проблема 32 против 64-битного python.