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.