Pandas без добавления столбца после присвоения индекса Python3 .5.0 - PullRequest
1 голос
/ 13 февраля 2020

Я попробовал следующие утверждения:

import pandas as pd
df = pd.DataFrame(index=[i for i in range(5)])
df.columns = ["res"+str(i) for i in range(5)]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python35\lib\site-packages\pandas\core\generic.py", line 5080, in __setattr__
    return object.__setattr__(self, name, value)
  File "pandas\_libs\properties.pyx", line 69, in pandas._libs.properties.AxisProperty.__set__
  File "C:\Python35\lib\site-packages\pandas\core\generic.py", line 638, in _set_axis
    self._data.set_axis(axis, labels)
  File "C:\Python35\lib\site-packages\pandas\core\internals\managers.py", line 155, in set_axis
    'values have {new} elements'.format(old=old_len, new=new_len))
ValueError: Length mismatch: Expected axis has 0 elements, new values have 5 elements

Не понял причину этого. Если у меня есть индекс, то почему столбец не добавляется?

Ответы [ 2 ]

3 голосов
/ 13 февраля 2020

Я думаю, что проблема сначала создается без столбца DataFrame, поэтому, если хотите присвоить имена столбцов, это не удалось.

Решением является добавление параметра columns в конструктор DataFrame, индекс должен быть упрощенным - только назначенный range:

df = pd.DataFrame(index= range(5), columns=["res"+str(i) for i in range(5)])
print (df)
  res0 res1 res2 res3 res4
0  NaN  NaN  NaN  NaN  NaN
1  NaN  NaN  NaN  NaN  NaN
2  NaN  NaN  NaN  NaN  NaN
3  NaN  NaN  NaN  NaN  NaN
4  NaN  NaN  NaN  NaN  NaN

Если хотите назначить после DataFrame только с индексом, используйте DataFrame.reindex:

df = pd.DataFrame(index=range(5))
df = df.reindex(["res"+str(i) for i in range(5)], axis=1)
print (df)
   res0  res1  res2  res3  res4
0   NaN   NaN   NaN   NaN   NaN
1   NaN   NaN   NaN   NaN   NaN
2   NaN   NaN   NaN   NaN   NaN
3   NaN   NaN   NaN   NaN   NaN
4   NaN   NaN   NaN   NaN   NaN
1 голос
/ 13 февраля 2020
import pandas as pd
df = pd.DataFrame(index= range(5))
for i in range(5):
  df['res'+str(i)]= '0'
print (df)

  res0 res1 res2 res3 res4
0    0    0    0    0    0
1    0    0    0    0    0
2    0    0    0    0    0
3    0    0    0    0    0
4    0    0    0    0    0
...