python pandas "невозможно установить строку с несоответствующими столбцами" ошибка - PullRequest
0 голосов
/ 01 декабря 2018

У меня возникла проблема при добавлении новой строки в набор данных.

Вот пример DataFrame.

column_names = ['A','B','C']
items = [['a1','b1','c1'],['a2','b2']]
newDF = pd.DataFrame(items,columns=column_names)
print(newDF)

вывод:

    A   B     C
0  a1  b1    c1
1  a2  b2  None

Поскольку c2 отсутствовал, его заменили на None.Это нормально и, как и ожидалось.

Теперь, если я продолжу добавлять подобные строки к существующему DataFrame, например:

newDF.loc[len(newDF)] = ['a3','b3']

Я получаю ошибку "не могу установить строку снесоответствующие столбцы ".

Как добавить эту дополнительную строку, чтобы она автоматически позаботилась об отсутствии c3 с помощью None или NaN?

Ответы [ 3 ]

0 голосов
/ 01 декабря 2018

Вы указываете новую строку в качестве словаря и создаете из нее фрейм данных.

new_entry = {'A': ['a3'], 'B': ['b3']}
new_entry_df=pd.DataFrame.from_dict(new_entry)

Теперь это можно добавить к исходному фрейму данных

newDF.append(new_entry_df)

    A   B     C
0  a1  b1    c1
1  a2  b2  None
0  a3  b3   NaN
0 голосов
/ 01 декабря 2018

просто:

>>> print(newDF)
    A   B     C
0  a1  b1    c1
1  a2  b2  None
>>> newDF
    A   B     C
0  a1  b1    c1
1  a2  b2  None

Просто поместите новый индекс 2 с новыми значениями a3 & b3 и последним столбцом.

>>> newDF.loc['2'] = ['a3','b3', np.nan]
>>> newDF
    A   B     C
0  a1  b1    c1
1  a2  b2  None
2  a3  b3   NaN

ИЛИ

>>> row = ['a3','b3', np.nan]
>>> newDF.loc['2'] = row
>>> newDF
    A   B     C
0  a1  b1    c1
1  a2  b2  None
2  a3  b3   NaN

Другой способ: добавив в Dataframe новые значения в строке для нужных столбцов, как мы имеем для A & B, этот следующий столбец для них станет строкой NaN

>>> row
['a3', 'b3']
>>> newDF.append(pd.DataFrame([row],index=['2'],columns=['A', 'B']))
    A   B     C
0  a1  b1    c1
1  a2  b2  None
2  a3  b3   NaN
0 голосов
/ 01 декабря 2018

Один из вариантов: DataFrame.append:

>>> new_row = ['a3', 'b3']
>>> newDF.append(pd.Series(new_row, index=newDF.columns[:len(new_row)]), ignore_index=True)
    A   B     C
0  a1  b1    c1
1  a2  b2  None
2  a3  b3   NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...